python爬虫日记本爬虫专题

简单 Scrapy 使用小结

2017-10-04  本文已影响26人  MrException

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

爬取网站

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

Bug

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

猜你喜欢

热点阅读