当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Python利用Scrapy框架爬取豆瓣电影示例(3)

    栏目:Linux/apache问题 时间:2020-01-29 21:21

    xpath选择器

    /表示从当前位置的下一级目录进行寻找,//表示从当前位置的任意一级子目录进行寻找,

    默认从根目录开始查找,. 代表从当前目录开始查找,@后跟标签属性,text()函数代表取出文字内容

    //div[@id='wrapper']//li  代表先从根目录开始查找id为wrapper的div标签,然后取出其下的所有li标签

    .//div[@class='pic']/em[1]/text()  代表从当前选择器目录开始查找所有class为pic的div之下的第一个em标签,取出文字内容

    string(//div[@id='endText']/p[position()>1]) 代表选取id为endText的div下第二个p标签之后的所有文字内容

    /bookstore/book[last()-2] 选取属于 bookstore 子元素的倒数第3个 book 元素。

    CSS选择器

    还可以使用css选择器来选择页面内的元素,其通过CSS伪类的方式表达选择的元素,使用如下

    # 选择类名为left的div下的p标签中的文字
    response.css('div.left p::text').extract_first()
     
    # 选取id为tag的元素下类名为star元素中的文字
    response.css('#tag .star::text').extract_first()

    5、数据保存

    在运行爬虫文件时通过参数-o指定文件保存的位置即可,可以根据文件后缀名选择保存为json或者csv文件,例如

    scrapy crawl movie -o data.csv

    还可以piplines.py文件中对取得的Item数据作进一步操作从而通过python操作将其保存到数据库中

    6、中间件设置

    有时为了应对网站的反爬虫机制,需要对下载中间件进行一些伪装设置,包括使用IP代理和代理user-agent方式,在middlewares.py文件中新建一个user_agent类用于为请求头添加用户列表,从网上查一些常用的用户代理放入USER_AGENT_LIST列表,然后通过random函数从中随机抽取一个作为代理,设置为reques请求头的User_Agent字段

    class user_agent(object):
      def process_request(self, request, spider):
        # user agent 列表
        USER_AGENT_LIST = [
          'MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23',
          'Opera/9.20 (Macintosh; Intel Mac OS X; U; en)',
          'Opera/9.0 (Macintosh; PPC Mac OS X; U; en)',
          'iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)',
          'Mozilla/4.76 [en_jp] (X11; U; SunOS 5.8 sun4u)',
          'iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)',
          'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0',
          'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0',
          'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0',
          'Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)',
          'Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)'
        ]
        agent = random.choice(USER_AGENT_LIST) # 从上面列表中随机抽取一个代理
        request.headers['User_Agent'] = agent # 设置请求头的用户代理

    在settings.py文件内设置开启下载中间件即取消如下几行的注释,注册代理类user_agent并设置优先级,数字越小优先级越高

    更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》