[爬虫] 学Scrapy,顺便把它的官方教程给爬下来
想学爬虫主要是因为算法和数据是密切相关的,有数据之后可以玩更多有意思的事情,数据量大可以挖掘挖掘到更多的信息。
之前只会通过python中的request库来下载网页内容,再用BeautifulSoup、re正则工具来解析;后来了解到Scrapy爬虫框架,现在入门先写个小小的爬虫项目,这里做个简单的总结和记录。
官方教程:https://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html(包括安装指南)
Github:https://github.com/scrapy
1. 创建项目
scrapy startproject -h scrapy startproject scrapytutorial cd scrapytutorial/ scrapy genspider scrapy_tutorial_spider scrapy-chs.readthedocs.io mkdir output
2. 编写爬虫代码
# -*- coding: utf-8 -*- import scrapy import codecs class ScrapyTutorialSpiderSpider(scrapy.Spider): name = 'scrapy_tutorial_spider' # allowed_domains = ['scrapy-chs.readthedocs.io'] start_urls = ['https://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html'] def parse(self, response): print("response.url: %s" % response.url) # 保存完整网页内容到文件 filename = response.url.split("/")[-1] print("filename: %s" % filename) with codecs.open("output/" + filename, "wb") as fw: fw.write(response.body) # TODO 提取关键信息 # 遍历下一页 next_url = response.css("div.rst-footer-buttons > a::attr('href')").extract()[0] if next_url is not None: next_url = response.urljoin(next_url) print("next_url: %s" % next_url) yield scrapy.Request(next_url)
3. 启动爬取
scrapy crawl scrapy_tutorial_spider
完整爬下来有45个文件:
因为刚上手,先按下面几步走:
(1) 把某个网页完整爬下来,保存到文件 (2) 追踪链接:通过提取感兴趣的页面的链接(例如想要下一页的内容)并进行追踪,获取更多的数据 (3) 动态解析网页,只提取感兴趣的部分内容并保存
目前还不太熟悉CSS选择器以及XPath表达式,关于第(3)部提取关键信息还没做,后续将会逐渐学习和完善。
(参考官网的两个例子:tutorial、QuotesBot)
另外,网上有很多不错的爬虫项目,可以用来练手:32个Python爬虫项目
爬虫可能涉及到定时爬取、账号注册和登录、验证码破解等等,还是挺有挑战性的~