• Python 爬虫 —— scrapy


    0. 创建网络爬虫的常规方法

    • 进入命令行(操作系统的命令行,不是 python 的命令行)

      • windows:cmdc:UsesAdminstrator>
      • Linux:$
    • 执行:scrapy startproject myfirstproj

      会自动创建一些文件:

      • __init__.py items.py
      • pipelines.py settings.py spiders

    1. settings.py

    settings.py 是爬虫的主要配置文件,其中的几个配置项为:

    • USER_AGENT(用户代理,简称 UA),也即向 http 发请求时,表明自己的身份,这里为了演示的需要,我们将其(真实身份是爬虫)伪造成浏览器,改成:

      USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
    • ROBOTSTXT_OBEY表示是否遵守robots协议(被封禁的不抓取),因为我们的目的不纯,所以我们不遵守,改成

      ROBOTSTXT_OBEY = False
    • DOWNLOAD_DELAY 表示对同一个站点抓取延迟,也就是抓一个,歇一会,再抓一个,再歇一会,为了对对方站点冲(yi)击(bei)太(fa)大(xian),我们调整为1,也就是一秒抓一个

    • CONCURRENT_REQUESTS_PER_DOMAIN 表示对同一个站点并发有多少个线程抓取,同样道理,我们也调整为 1

    • CONCURRENT_REQUESTS_PER_IP 同理也调整为 1

    2. 爬虫程序的编写

    接着我们进入 spiders 文件夹,创建第一个爬虫程序,如下:

    import scrapy
    class MySpider(scrapy.Spider):
        name = 'zhang'
                # 该项目名,启动时也用这个名字
        allowed_domains= ['blog.csdn.net']
        start_urls = [
            'http://blog.csdn.net/lanchunhui'
        ]
                # response.url ⇒ 'http://blog.csdn.net/lanchunhui'
        def parse(self, response):
            filename = response.url.split('/')[-2] + '.html'
            with open(filename, 'wb') as f:
                f.write(respobse.body)

    这里面 start_urls 是初始抓取时的种子链接(seed),parse 方法在抓取完成后自动调用,会把抓取回来的 body 内容写到以 .html 为结尾的文件中。

    然后退到上一级目录执行:

    > scrapy crawl zhang

    执行完成后会多出来一个 blog.csdn.net.html 文件,内容就是http://blog.csdn.net/lanchunhui 网页的内容

    3. items.py

    items.py 是抓取结果解析出来的结构体;

    4. 页面解析

    页面解析,这是所有的网络爬虫不能忽略的功能,而且是最核心的部分。python 库用于页面解析的有 BeautifulSoup(速度慢)和 Ixml(非标准库),Scrapy 基于 Ixml 实现了一套页面解析工具,叫做 Selectors。

    其使用也十分简单,创建 TestSelectors.py 文件如下:

    from scrapy.selector import Selector
    from scrapy.http import HtmlResponse
    body = '<html><body>hello<span>world</span></body></html>'
    span_text = Selector(text=body).xpath('//span/text()').extract()
    print(span_text)

    进入终端,执行:

    > python TestSelectors.py
    [u'world']

    注意:

    1. 如果想获取文本,调用 selector 的 xpath 方法后要调用 extract() 方法

    2. 如果想找到第一个匹配 xpath 的内容,需要调用 extract_first() 方法

    5. 调试页面解析

    scrapy 提供了极为简单的页面解析方法,直接执行

    > scrapy shell www.baidu.com
    ...
    In [1]: 

    进入调试终端,可以直接使用 request、response 等变量来做各种操作尝试.

  • 相关阅读:
    理解RESTful架构
    Javascript闭包
    Javascript立即执行函数
    多个Jboss端口冲突配置;一个Jboss多个server端口配置
    MyEclipse部署Jboss出现java.lang.OutOfMemoryError: PermGen space
    css摘抄
    css 浮动和绝对定位的区别
    搭建第一个web项目:jasperReports+ireport制作pdf报表
    Hibernate的检索方式
    浅谈JavaScript的作用域
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423101.html
Copyright © 2020-2023  润新知