美文网首页大数据 爬虫Python AI SqlPython小哥哥
python scrapy框架爬取天津市科技计划项目成果库数据

python scrapy框架爬取天津市科技计划项目成果库数据

作者: 轻松学Python111 | 来源:发表于2019-05-18 16:42 被阅读10次

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

python3爬虫入门教程

爬取网址 http://cgk.kxjs.tj.gov.cn/navigation.do

python3爬虫入门教程

有很明显的分页表示

列表如下

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,反正闲着也是闲着呢,不如学点东西啦~~

http://cgk.kxjs.tj.gov.cn/detail.do?id=60

python3爬虫入门教程

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

相关文章

  • python scrapy框架爬取天津市科技计划项目成果库数据

    今天本来没有打算抓取这个网站的,无意中看到某个微信群有人问了一嘴这个网站,想看一下有什么特别复杂的地方,一顿操作下...

  • Scrapy框架步骤

    简单了解一下Scrapy框架于操作步骤 什么是Scrapy框架呢? scrapy是python下的数据爬取集框架,...

  • python爬虫框架Scrapy

    爬虫框架Scrapy(一) 框架Scrapy是使用python实现的一个爬取网站数据、提取数据的异步网络框架,加快...

  • 2021-07-21

    Scrapy框架的基本使用 scrapy框架简介 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构...

  • spider整理

    Scrapy框架是一个Python的爬取网站数据,提取结构性数据的应用框架,用途广泛。Scrapy Engine(...

  • [CP_14] Python爬虫框架01:Scrapy框架创建项

    目录结构 一、Scrapy框架简介 1. Scrapy引入 Scrapy:是用Python实现爬取网站数据、提取结...

  • Scrapy+MongoDB爬取豆瓣《我不是药神》短评

    框架入门类练手项目,Scrapy+MongoDB爬取豆瓣《我不是药神》短评先看看词云成果图: 数据库存储图: 项目...

  • Scrapy框架学习---Scrapy介绍(一)

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非...

  • Scrapy框架介绍

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非...

  • Scrapy 框架

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非...

网友评论

    本文标题:python scrapy框架爬取天津市科技计划项目成果库数据

    本文链接:https://www.haomeiwen.com/subject/ilvtzqtx.html