python scrapy框架最后爬取的结果在哪儿看到_python scrapy框架爬取天津市科技计划项目成果库数据...

今天本来没有打算抓取这个网站的,无意中看到某个微信群有人问了一嘴这个网站,想看一下有什么特别复杂的地方,一顿操作下来,发现这个网站除了卡慢,经常自己宕机以外,好像还真没有什么特殊的....

有很明显的分页表示

列表如下

Request URL: http://cgk.kxjs.tj.gov.cn/navigation.do

Request Method: POST

参数说明,里面两个比较重要的 pageNum 页码,numPerPage 每页显示的数据

trades:

fields:

enterprise_type:

archive_year:

hsql:

searchKey:

pageNum: 2

numPerPage: 25

date_low:

date_high:

拼接地址

由于是POST请求,所以需要引入FormRequest 类。重写start_requests方法,注意

yield FormRequest(url=self.start_url,callback=self.parse,formdata=data,dont_filter=True)

中dont_filter=True 不过滤重复请求。

import scrapy

from scrapy import Request,FormRequest,Selector

import time

class TjSpider(scrapy.Spider):

name = 'Tj'

allowed_domains = ['cgk.kxjs.tj.gov.cn']

start_url = "http://cgk.kxjs.tj.gov.cn/navigation.do"

def start_requests(self):

#yield scrapy.Request(url="http://cgk.kxjs.tj.gov.cn/detail.do?id=1", callback=self.parse_detail)

for i in range(1,73): #73

data = {

"trades":"",

"fields":"",

"enterprise_type":"",

"archive_year":"",

"hsql":"",

"searchKey":"",

"pageNum": str(i),

"numPerPage": "25",

"date_low":"",

"date_high":"",

}

print("正在爬取{i}".format(i=i))

yield FormRequest(url=self.start_url,callback=self.parse,formdata=data,dont_filter=True)

time.sleep(10)

数据解析

这个步骤分为2步,第一步解析列表页,获取详情页面的链接,第二步获取具体的字段,在匹配字段的时候采用字典动态更新,用来生成mongodb的字典格式。

def parse(self, response):

links = response.css('#Result tr td:nth-child(1)>a::attr(href)').extract()

date = response.css('#Result tr td:nth-child(2)::text').extract()

for item in range(len(links)):

# yield {

# "link":links[item],

# "date":date[item]

# }

yield scrapy.Request(url=response.urljoin(links[0]),callback=self.parse_detail,meta={"date":date[item]})

def parse_detail(self,response):

trs = Selector(response).xpath("//table[@class='tab_lx003'][2]/tbody/tr")

item = {}

item.update({"date":response.meta["date"]})

for tr_item in trs:

item.update({tr_item.xpath("td[1]/text()").extract_first():tr_item.xpath("td[2]/text()").extract_first()})

yield item

time.sleep(3)

科技计划项目成果数据入库

入库操作非常简单了,走一遍之前的博客就可以,这个网站爬取的过程中没有太多问题,就是总是宕机掉,采用代理IP也没有解决,应该只是访问速度慢的原因,建议多爬取一下。

最后,发现详情页,最后的id=数字是连续性的,可以直接迭代,小编整理一套Python资料和PDF,有需要Python学习资料可以加学习群:1004391443,反正闲着也是闲着呢,不如学点东西啦~~

对付这种小数据的网站,其实采用Selenium也未尝不可啊~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值