上一篇讲道了爬虫入门,这一篇介绍怎么使用爬虫框架来爬数据。框架用的是scrapy https://doc.scrapy.org/en/latest/。在开始动手之前,还是建议大家用pyenv和virtualenv隔离一下环境。当然如果觉得麻烦的话可以略过。
先把环境切到3.5.3,然后再切换包环境。我系统是没有安装scrapy的,所以要进行下面这两步。安装了scrapy的忽略它。看不明白我在说什么的也可以忽略它。
pyenv local 3.5.3 pyenv activate venv353
万事俱备了,可以开始了。写爬虫入门了以后,最困难的应该是调试。在这个阶段,需要学习http协议,要学习html,要学习CSS,还要学会各种字符编码知识,相信我,不会各种编码的话,迟早会一头栽进坑里好几天爬不上来,学习曲线一下变得很陡峭。还要会处理各种异常,至于框架本身的学习,倒不是太难的事情了。因为网上一搜一大把入门的博客,跟着做总能成功的。说了这么多,无非是在讲写爬虫要进阶需要的知识面。如果都不具备,那还是先看看这方面的书吧。
为了方便码农入门和调试,scrapy提供了一个叫shell的强大模式。用起来也很简单:
scrapy shell url
scrapy会自动打开url,并且将返回放在一个叫response的对象里,在scrapy shell中可以直接访问。在shell中可以直接对它进行操作,方便码农调试各种正则表达式,还有DOM操作的表达式。
scrapy_shell_step1.png
这里访问的是一个药材网站,上面有价格[同理可以把它换成某电商,某商城]。按惯例先上流星器开发者工具,上去检测一下。以找到想要的内容。探测到价格是在一个div里面,价格条目都是li元素。
定位到了要取的东西以后,下面是决定用什么方式来获取元素。如果只想取关键字,就推荐使用正则表达式;如果只取某一类,就推荐用css选择器;如果要取结构化的内容,就用xpath。因为要取表格,这里使用xpath。
scrapy_shell_step2.png
到这scrapy的shell模式就介绍完成了,scrapy这个功能还是非常方便的。下面介绍一下怎么用scrapy建一个项目试试。
scrapy startproject spider
scrapy_project_s1.png
项目建好后会生成一个spider的目录,作为初学者,可以忽略items.py,还有pipeline.py。在spiders目录建一个文件,命名可自己来定,这里叫ZycSpider,这个类必须子scrapy.Spider的子类。类成员name必须唯一。parse方法必须要有的,要不然抓了不处理就没意义了不是。
#coding:utf-8
import scrapy
from spider.items import PriceItem
class ZycSpider(scrapy.Spider):
name = “zyc”
def start_requests(self):
urls = [‘http://www.zyctd.com/jiage/1-0-0.html’]
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
pass
pass
#version1
def parse(self, response):
page = response.url.split(‘/’)[-2]
filename = ‘%s.html’ % page
with open(filename, ‘wb’) as f:
f.write(response.body)
pass
self.log(‘Saved file %s’ % filename)
#version2
def parse(self, response):
price_tbl = response.xpath(“//ul[@class=’priceTableRows’]”)
price_list = price_tbl.xpath(“li”)
for i in price_list:
price_detail = i.xpath(“span//text()”)
[name,quality,from_where,price,future_move,week_up,month_up,year_up] = price_detail.extract()
yield {
‘name’:name,
‘quality’:quality,
‘from_where’:from_where,
‘price’:price,
‘future_move’:future_move,
‘week_up’:week_up,
‘month_up’:month_up,
‘year_up’:year_up
}
pass
pass
其中version1是把文件直接存下来,version2是解析后,吐出json。
代码写好以后,
cd spider crapy crawl zyc
结果就出来了。下一步就是完善这个代码,加上items.py,加上pipelines.py的功能。再加上页面内连接抓取。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试