简单 Scrapy 使用小结

作者: MrException | 来源:发表于2017-10-04 21:47 被阅读26次

    Scrapy

    安装Scrapy

    pip install scrapy

    Scrapy Doc

    查看Scrapy的文档,请点击

    第一个Scrapy项目

    1. 到代码位置执行cmd指令scrapy startproject tutorial
    2. cd 到tutorial目录下
    3. 编写爬虫脚本quotes_spider.py
    import scrapy
    
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
    
        def start_requests(self):
            urls = [
                'http://quotes.toscrape.com/page/1/',
                'http://quotes.toscrape.com/page/2/',
            ]
            for url in urls:
                yield scrapy.Request(url=url, callback=self.parse)
    
        def parse(self, response):
            page = response.url.split("/")[-2]
            filename = 'quotes-%s.html' % page
            with open(filename, 'wb') as f:
                f.write(response.body)
            self.log('Saved file %s' % filename)
    
    1. 执行cmd指令scrapy crawl quotes运行爬虫

    报错一:no module named win32api
    解决方案:原因是缺少win32,到 http://sourceforge.net/projects/pywin32/files/ ,找到对应的版本进行下载,直接安装即可

    XPath

    xpath是一种解析dom树的语法
    记录一下用到的几个语法

    1. response.xpath("//div[@class='title']")表示获取class是title的div节点
    2. response.xpath("./h2/text()")表示获取该节点下h2标签下的文本内容
    3. response.xpath("//div[@id='contenttxt']/node()")表示获取属性id为contenttxt的所有子节点列表
    4. .extract()表示取出节点,extract_first()表示取出第一个节点

    网上说从chrome或者firefox中查看元素并copy as xpath的方式经过测试不正确,不建议使用

    Scrapy使用xpath解析之后的中文字符串经过unicode编码,有些字符在python中是没法print的,所以遇到这种‘/xa0’类的字符最好是替换掉

    Scrapy保存至json或xml

    • 保存至json
      • scrapy crawl news -o news.json -t json
    • 保存至xml
      • scrapy crawl news --set FEED_URI=out.xml --set FEED_FORMAT=xml

    爬取网站

    1. Freebuf
    2. 伯乐在线
    3. 开发者头条

    Bug

    1. 爬取过程中出现过robots.txt的Forbidden情况,在爬虫的settings.py中设置ROBOTSTXT_OBEY = False

    相关文章

      网友评论

        本文标题:简单 Scrapy 使用小结

        本文链接:https://www.haomeiwen.com/subject/uuacyxtx.html