【自用】scrapy入门笔记

    科技2024-04-15  68

    python3.8安装scrapy,参考可用 https://www.lfd.uci.edu/~gohlke/pythonlibs/

     

    Scrapy基本项目流程为:

    创建一个Scrapy项目

    ——>定义提取的Item

    ——>编写爬取网站的spider并提取Item

    ——>编写Item Pipeline来存储提取到的Item(即数据)

     

    一般我们的爬虫流程为:

    抓取索引页:请求索引页的URL并得到源代码,进行下一步分析;

    ——>获取内容和下一页链接:分析源代码,提取索引页数据,并且获取下一页链接,进行下一步抓取;

    ——>翻页爬取:请求下一页信息,分析内容并请求在下一页链接;

    ——>保存爬取结果:将爬取结果保存为特定格式和文本,或者保存数据库。

     

    ①创建项目:在开始爬取之前,您必须创建一个新的Scrapy项目。 进入您打算存储代码的目录中,运行下列命令(以知乎日报为例):

    scrapy startproject zhihurb

    ②定义Item

    这一步是定义我们需要获取到的数据信息,比如我们需要获得网站里的一些url,网站文章的内容,文章的作者等。这一步定义的地方就在我们的items.py文件。

    ③编写Spider

    这一步就是写我们最熟悉的爬虫了,而我们的Scrapy框架可以让我们不需要去考虑实现的方法,只需要写出爬取的逻辑就可以了。

    首先在scrapy项目下面创建新的爬虫spiders,我们需要在 spiders/ 文件夹下创建我们的爬虫文件,比如就叫spider.py。

    scrapy genspider 文件名 要爬的域名

    打开大框架就能看见刚刚新建的爬虫文件,初始内容就是刚刚我们给出的域名信息等,注意这里url是一个列表。

    ④运行爬虫

    scrapy crawl 爬虫文件名

    将爬到的结果保存在html里,运行后就可以看到生成了这个html文件,打开就是要爬的网页了。

    ⑤提取数据

    接着就可以使用解析工具解析源码,拿到数据了,我用了XPath提取一些需要用的文本数据,直接输出成txt。

     

     

    Q:503 service unavailable

    A:到settings.py里加一个user-agent代理,在网页headers的request header,随便找一个就行。

     

     

     用到的一些TIPS:

    .xpath() 返回一个类 SelectorList 的实例,为了提取真实的原文数据,需要调用.extract()

     

    .extract() 返回列表

    .extract()[0] = [0].extract() 返回list中的第一个元素

    [0].extract()[0] 返回列表中第一项的第一个字符

     

    /text 返回文本内容

    //text 获取本标签的文本以及它所有子标签的文本。

     

    get() 将xpath提取到的数据从selector转换为unicode,返回字符串

    getall() 将xpath提取到的数据从selector转换为unicode,返回的是一个列表

     

    xpath('string(.)') 获取所有文本并且拼接

     

    同时选择多个属性 c=response.xpath('//div[@class="info"][@data-key="1"]')

     

    去除列表中换行符 a = ['\n','sth i need']  → b = [x.strip() for x in a if x.strip()!='']

    去除列表中空字符串最快最简单的方法 result = list(filter(None, result)) 参考这里

     

     

    Processed: 0.017, SQL: 8