指导:@强哥带你学编程,以及看这篇博客的各位小伙伴,你们的点击率是够呛哥的动力!
标准开头:
一、预备知识与工具
(1)选用requests库
(2)我要在哪里找到我要爬取的数据?以执法惩戒网站为例
网址:http://119.6.84.165:8085/sfgk/webapp/area/cdsfgk/zxxx/zxcj.jsp
答:①按f12,f5刷新,点击network如图:
点击每一个查找那个是你需要的,假如我们是爬取图片和动图的话,我们就看看jpg是不是我们想要的,但是我们的目标是爬取表格,我们就完全没有必要点开.png\.gif\.jpg,我们跳过不看!重点看什么,看.jsp结尾的,首先打开第一个zxcj.jsp,看preview和response都可以,但是preview比较直观显示的是网页的一些标题、菜单栏之类的,看看response,就是网页的一些元素。看到这里你会纳闷我要的表格内容呢?不要着急,在我们一顿搜索以后找到了ajax.jsp(绿色框住的那个),一点preview,哎?一堆乱码??但是仔细一看数字信息对上了,如图:
所以ajax.jsp就是我们想要请求的。
二、开始爬虫
(1)找到请求头Headers,From Data的信息,这些参数都是我们要用来发送post请求的,复制一下。有很多人觉得很费解,为什么够呛哥要用元组呢?据我猜测from是以这种格式传的。那咱们看看request的官方文档到底是怎么解释?“你还可以为 data 参数传入一个元组列表。在表单中多个元素使用同一 key 的时候,这种方式尤其有效。”——《快速上手》
但是你以为这样就结束了吗?我们现在只能爬取一页那我们是不是应该还要找一下那个参数可以控制第几页出现了参数currentPage。现在就可以写到post_data里面了。
post_data = (('opt', 'getSxbzxrList'), ('zxlx','zxcj'), ('xxlx', 0), ('nd', ''), ('dz',''), ('zh', ''), ('fymc', '成都市中级人民法院'), ('bzxr',''), ('fydm', 510100),('currentPage',i))
(2)按照标准套路填写,我只爬了4页:
瞪大你们的眼睛看了我请求的URL的末尾是/ajax.jsp,知道上文为什么要加彩色字了吗?我请求的URL的末尾是/ajax.jsp!我请求的URL的末尾是/ajax.jsp!我请求的URL的末尾是/ajax.jsp!
url = 'http://119.6.84.165:8085/sfgk/webapp/area/cdsfgk/zxxx/ajax.jsp' for page in range(0, 4): post_data = (('opt', 'getSxbzxrList'), ('zxlx','zxcj'), ('xxlx', 0), ('nd', ''), ('dz',''), ('zh', ''), ('fymc', '成都市中级人民法院'), ('bzxr',''), ('fydm', 510100),('currentPage',page)) response = requests.post(url, data=post_data) print(response.text)
爬取的数据:
升级一下:
class getData(object): def __init__(self,url): self.url = url self.html = '' def get_html(self): for page in range(0, 4): post_data = (('opt', 'getSxbzxrList'), ('zxlx','zxcj'), ('xxlx', 0), ('nd', ''), ('dz',''), ('zh', ''), ('fymc', '成都市中级人民法院'), ('bzxr',''), ('fydm', 510100),('currentPage',page)) self.html += requests.post(self.url, data=post_data).text return self.html gd = getData(URL) print(gd.get_html())
小伙伴们,够呛哥有个问题,为什么键有重复?欢迎评论留言。