爬前叨叨

缘由

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

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



有很明显的分页表示

列表如下

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=数字是连续性的,可以直接迭代

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

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

欢迎关注,我的微信号哦~~~

Python爬虫入门教程 39-100 天津市科技计划项目成果库数据抓取 scrapy的更多相关文章

  1. Python爬虫入门教程 32-100 B站博人传评论数据抓取 scrapy

    1. B站博人传评论数据爬取简介 今天想了半天不知道抓啥,去B站看跳舞的小姐姐,忽然看到了评论,那就抓取一下B站的评论数据,视频动画那么多,也不知道抓取哪个,选了一个博人传跟火影相关的,抓取看看.网址 ...

  2. Python爬虫入门教程 27-100 微医挂号网专家团队数据抓取pyspider

    1. 微医挂号网专家团队数据----写在前面 今天尝试使用一个新的爬虫库进行数据的爬取,这个库叫做pyspider,国人开发的,当然支持一下. github地址: https://github.com ...

  3. Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy

    爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...

  4. Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分

    1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...

  5. Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分

    1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...

  6. Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy

    爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...

  7. Python爬虫入门教程 41-100 Fiddler+夜神模拟器+雷电模拟器配置手机APP爬虫部分

    爬前叨叨 从40篇博客开始,我将逐步讲解一下手机APP的爬虫,关于这部分,我们尽量简化博客内容,在这部分中可能涉及到一些逆向,破解的内容,这部分尽量跳过,毕竟它涉及的东西有点复杂,并且偏离了爬虫体系太 ...

  8. Python爬虫入门教程 57-100 python爬虫高级技术之验证码篇3-滑动验证码识别技术

    滑动验证码介绍 本篇博客涉及到的验证码为滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成. 这类验证码不常见了,官方介绍地址为:https://promotion.a ...

  9. 【Python入门只需20分钟】从安装到数据抓取、存储原来这么简单

    基于大众对Python的大肆吹捧和赞赏,作为一名Java从业人员,我本着批判与好奇的心态买了本python方面的书<毫无障碍学Python>.仅仅看了书前面一小部分的我......决定做一 ...

随机推荐

  1. redis.Redis与redis.StrictRedis区别

    redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令(比如,SET命令对应与StrictRedi ...

  2. scala_2

    一.scala类 . 在java中程序的入口是main方法->定义在class中 在scala中程序的入口是main方法->定义在object对象中 案例一: class People { ...

  3. MySql分割字符串【存储过程】

    MYSql没有表变量,通过函数无法返回表. 参考网址:https://bbs.csdn.net/topics/330021055 DELIMITER $$ USE `数据库`$$ DROP PROCE ...

  4. C++第一课:基本语法for Visual Studio 2015[个人见解]

    在学习C++时,或许不了解情况的人会问:到底先学习C语言还是C++,哪个更好? 那么小编的个人见解是:你在学习时别管哪个语言好与不好,是个语言它都是好语言,关键在于你会挖掘其中存在的价值,C++可以说 ...

  5. 调用获取学生信息的接口,保存到excel里面

    # 2.http: // doc.nnzhp.cn / index.php?s = / 6 & page_id = 14# 调用获取学生信息的接口,保存到excel里面 import requ ...

  6. (转)protein 数据库

    最早关注蛋白质互作网络,是在来GDMC第一年的时候,中间停了半年看互作-各种算法,网络分析停滞不前,没想到搞到最后,还是和网络碰到了一起,我总是会潜意识走近给自己第一印象不错的object,包括人.用 ...

  7. java + maven 实现发送短信验证码功能

    如何使用java + maven的项目环境发送短信验证码,本文使用的是榛子云短信 的接口. 1. 安装sdk 下载地址: http://smsow.zhenzikj.com/doc/sdk.html ...

  8. 如何让浏览器支持ES6语法,步骤详细到小学生都能看懂!

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  9. 原来Java世界里也有这么多精彩的故事,学Java真有趣!

    大千世界,无所不有.这世上不光有人类世界,还有咱们的java世界.今天就由我这个实习导游带领你们了解了解咱们的java世界奇妙之处.   有一种暖男叫catch,有一种真爱叫try---catch,世 ...

  10. 吴恩达机器学习笔记57-基于内容的推荐系统(Content Based Recommendations)

    假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分. 前三部电影是爱情片,后两部则是动作片,我们可以看出Alice 和Bob 似乎更倾向与爱情片, 而 Carol 和 ...