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 使用小结

发表评论