您的位置:首页 > 编程语言 > Python开发

python3 [爬虫入门实战]爬虫之scrapy爬取中华人民共和国民政部

2017-08-04 22:20 603 查看

爬取缘由,主要是领导昨晚说要把整个网页上的数据都搞下来,我也没有去多想为什么,就尝试着把数据给爬下来了。昨天晚上回来没写多少, 跟今天早上写了写,也算熟悉了一下scrapy的post请求,跟fiddler的抓包过程吧。体验还是蛮好的。

1 先上一张要爬取的图片内容,虽然字段有点多:



所要标出来的字段都是要进行爬取的。

scrapy的项目创建可以按照之前的文章进行创建。

这里用了fiddler进行抓包,因为单纯的请求是被拒绝访问的,大家可以试着一下进行访问。
http://xzqh.mca.gov.cn/fuzzySearch


这次的数据因为时间匆忙什么的,也没有及时进行数据的存储方式,只是单纯的打印在控制台上。



主要疑难点:

1 scrapy 进行post方面数据的请求,

2 首次使用fiddler抓包进行项目的实践

3 对于字段的爬取,主要是一边调试,一边进行跟进的,对table 这些标签把握度还不是很大。

4 未对数据进行合理的整理,清洗,数据的存储,突然发现,爬虫又快被我落下了,可伶的安卓。想着自己能什么时候能鼓起勇气去找一份属于自己的爬虫工作


最后再贴上源代码,虽然整理的不是很好,但是里面的注释还是很详细的,主要贴spider里面的代码,我有空学习上传代码到github吧,虽然还是在学习的过程中。

#encoding=utf8
import scrapy
from govinfos.items import GovinfosItem

class GovInfos(scrapy.Spider):

# 启动爬虫的名称
name = 'govinfo'
# 爬虫的范围
allowed_domains=['xzqh.mca.gov.cn']

# 爬虫的第一个url
# start_urls = ['http://xzqh.mca.gov.cn/fuzzySearch']

# 这里是用post请求数据的
def start_requests(self):
url = 'http://xzqh.mca.gov.cn/fuzzySearch'

# FormRequest 是Scrapy发送POST请求的方法
yield scrapy.FormRequest(
url = url,
formdata = {"fs" : "%"},
callback = self.parse
)

# 爬取结果分析
def parse(self, response):
print('%'*30)

# print(response.body)
node_list = response.xpath("//*[@class='info_table']/tr")
for node in node_list:

# 根据jiansuo_table 进行判断是否包含,若不包含,则为城市的第一个名称
# 第一个城市的第一个名称
td1 = node.xpath("./td[@class='name_left']/a/text()").extract()

shen_address = node.xpath("./td/table[@class='jiansuo_table']/tr[@class='name_left']/td/a[@class='sheng_td']/text()").extract()
shi_address = node.xpath("./td/table[@class='jiansuo_table']/tr[@class='name_left']/td/a[@class='shi_td']/text()").extract()
qu_address = node.xpath("./td/table[@class='jiansuo_table']/tr[@class='name_left']/td[3]/a/text()").extract()
print('%' * 30)
print(td1)
print(shen_address)
print(shi_address)
print(qu_address)

# 驻地
zhudi_address =node.xpath("./td[@class='name_left']/text()").extract()
print(zhudi_address)
# renkou
person = node.xpath("./td[3]/text()").extract()
print(person)
#面积
area = node.xpath("./td[4]/text()").extract()
print(area)
# 行政区划
xingzhen = node.xpath("./td[5]/text()").extract()
print(xingzhen)
# 区号
quhao = node.xpath("./td[6]/text()").extract()
print(quhao)
# 邮编
# print(node)
youbian = node.xpath("./td[7]/text()").extract()
print(youbian)


完结,继续学习django的学习。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: