python爬虫表格table

451次阅读
没有评论
python爬虫表格table

上一篇讲道了爬虫入门,这一篇介绍怎么使用爬虫框架来爬数据。框架用的是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免费测试

相关文章:

版权声明:Python教程2022-10-25发表,共计2083字。
新手QQ群:570568346,欢迎进群讨论 Python51学习