爬前叨叨
缘由
今天本来没有打算抓取这个网站的,无意中看到某个微信群有人问了一嘴这个网站,想看一下有什么特别复杂的地方,一顿操作下来,发现这个网站除了卡慢,经常自己宕机以外,好像还真没有什么特殊的....
爬取网址 http://cgk.kxjs.tj.gov.cn/navigation.do
有很明显的分页表示
列表如下
Request URL: http://cgk.kxjs.tj.gov.cn/navigation.doRequest Method: POST
参数说明,里面两个比较重要的 pageNum
页码,numPerPage
每页显示的数据
trades: fields: enterprise_type: archive_year: hsql: searchKey: pageNum: 2numPerPage: 25date_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 scrapyfrom scrapy import Request,FormRequest,Selectorimport timeclass 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("http://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=数字
是连续性的,可以直接迭代
http://cgk.kxjs.tj.gov.cn/detail.do?id=60
对付这种小数据的网站,其实采用Selenium也未尝不可啊~~
作者:梦想橡皮擦
原文链接:https://www.cnblogs.com/happymeng/p/10425397.html
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦