多线程采集 web of science项目总结

第一次写文章,望各位大佬看到有什么不好的地方,多指正,少批评( ̄ェ ̄;)。

下面就是项目的总体思路哦,其实在使用这个完整的项目的时候,也写了一个同一个网站代码,但是需求不同,完成的项目是针对详情页,表单参数请求,加上xpath和beautifulsoup解析HTML定位网页标签数据,最后通过csv添加标题,保存对应的数据的思路,所以相对而言代码比较简单,但是网页限制就是会封账号,你的VPN账号!好像抓取的慢就不会被封,因为之前被封的账号都是在加了5个多线程下被封,后面的这个账号一直稳稳的抓取,没有被封,这是一个坑啊,网速一定要好!!!账号选个稳定,因为我是远程做的,一晚上三个小时都是在请求的路上!哭了!

现在就跟大家分享!之前的是请求获取全网站的,比较贪心,结果熬了通宵,写了一千多行代码,给了自己一个教训,就不说了。感兴趣的可以找我(^_−)☆。

首先呐,要准备账号!很重要~当然啦,看你的数据量需求,账号要同一服务器很重要,不然封号之后,更改请求参数就换到你吐血!。
在这里插入图片描述
在这里插入图片描述
第二个,当然是要确定你的需求啦!以上图片中就是我要抓取的数据,经过搜索之后大概是15000条数据量左右,so,我要先了解它的请求方式、网页的基本反爬手段以及翻页方式。
在这里插入图片描述
呐,这就是它的请求方式,我们可以看到,URL地址是通过代理账号ip+网站http加密域名+网页介绍:完整数据整理+附带参数形成的,再通过get请求,得到网站服务器的数据。

那后面的参数肯定不在我们的考虑范围之内,先拿地址再去拼接就好啦,地址有了!

url = “http://2.14.1.a346.prox.zhixinglib.com/full_record.do?”
然后就是网站的基本反爬,当然是上我们请求参数啦,那些隐藏在网站的限制不是我们首先考虑,首先要考虑的当然是我们的反爬三剑客!来看看请求参数,小爷手指一抖,事情不简单啊
在这里插入图片描述
注意看host,referer,这些明眼可见的参数,就是带上了我们的vpnIp呀,那也就是说换个账号或者服务器这些都得换一遍,那想到这个cookie绝对是不能少了,再一琢磨,这不得把整个请求参数都构造上去请求吗!!!那就是这样。因为!!请求参数太长了,而且也要根据具体网站参数,所以下图供各位参考!
在这里插入图片描述
(ps:本来想试一下代理池的,但是发现,网站跟ip没关系,只跟代理账号有关系,所以ip!不需要!!!)

接下来就是他的翻页参数,其实我们会有一种误区,理所应当的以为page就是翻页参数,我也是,直接range一手page!但是我们注意看他的请求参数!此时page是1,doc是1,因为我还没有翻页,然后开始翻页,观察参数测试!

开始分析,我先用迭代测试翻页,发现数据并没有随着翻页而变化,so…开始怀疑doc,所以先做页面翻页调试!

翻了3页!发现确实跟page没啥关系,doc才是能迭代数据的重点,那根据这个值,得到翻页的点,那到此我们已经得到我们的三个基本需求啦,网页数据请求、基本网页反爬手段及翻页。

开始pycharm撸代码叭!

import requests

def RequestXQ(pages)

params = {‘product’: ‘UA’,
‘search_mode’: ‘GeneralSearch’,
‘qid’: ‘96’,
‘SID’: ‘8BFLwaUbZpEC9Bl1Rtk’,
‘page’: page,
‘doc’: doc+10*page}

headers={'这里是headers参数,请参考上图!!)

url = “http://2.14.1.a346.prox.zhixinglib.com/full_record.do?”
htm1 = requests.get(url, headers=headers, params=params, verify=False).text

以上就是我发送请求的参数了,构造了get请求携带的params参数,headers请求参数,和发送get请求,携带上的对应参数,verify是验证!doc 修改为doc+10*page,代表着10页的数据之后,page才会刷新+1,所以是10!

下面就是数据解析啦

解析其实有点难在它的标题和作者的值,标题的话,其实我是想过用正则去匹配的,但是发现正则里面包含的数据,用sub清空不完,所以用了beautifulsoup,那通过beautifulsoup.find()定位class属性,发现就是拿不到数据,仔细斟酌了,思虑再三,想到了一个东西,就是他还有一个超级好用的方法,定位css标签,然后就获取到数据啦,嘿嘿!

在这里插入图片描述

拿到标题数据之后,就是搞作者的值了,但是我小看它了,首先我直接用的soup.find()定位p标签里class属性.text,就是这么潇洒自信,数据下来就只能流泪了,你只能看到作者这两个大字一行一行的保存在你的文件,后面的数据并没有进来!OK,事实证明,错的就是错的,那怎么办,只能先放弃咯,人生哲理:先做简单的,然后再回来找它,做难的,没错,就是这样,在哪里跌倒,就让它在哪里先趴一会。

事实证明,不顺之后,顺利的就来了,当然了,事实也证明,人生没有一帆风顺的事情,它来了!

参考文献!!!beautifulsoup只能使用赖皮的方式也就是上面的标题方法,定位到了里面的value lang_id 但是呢,只能取到里面的一个值!但是它有很多条!我发现怎么都取不到,很绝望,我翻了官方文档,里面也没有说怎么获取beautifulsoup定位的标签里面的全部的值,如果有知道的大佬,麻烦指点一下告知一下,谢谢!(ps:其实在后面的作者匹配的时候也是这个问题!但是后面换了解析方法!唯一一行标注黑体,希望看到,嘿嘿!)

于是就用了不是办法的办法,换个xpath来解析,嘿嘿!
在这里插入图片描述

呐,就是这样,完美解决,并且,每个参考文献后都有列表和""的分割,非常好用!

在这里插入图片描述

这是保存之后的效果,奈斯!感觉人生又充满了希望,淦!

于是作者的数据就有了希望,于是,根据需求改了又改,最终的获取数据代码就是以上加以下,作者1条!

在这里插入图片描述

希望有人看到我里面的not@class标签,哈哈哈,一点点小心机,在这里真的卡了很久!但是也学会了很多细节的东西,把之前的知识都贯通起来啦!
在这里插入图片描述

在这里插入图片描述

这个就是最终效果啦。
在这里插入图片描述

上面的params_list是存储每个需求数据的大列表。

通过csv保存每条列表的数据!

在这里插入图片描述

这个csv的标题添加很low!哭了!
在这里插入图片描述

最后添加了线程!

速度是快乐,账号被封的速度也很快乐!大概被封了11个账号,快乐就来了,有人报销,嘿嘿!

最后,就是整个完整项目的实现啦。
在这里插入图片描述

翻页!

最后的最后,希望各位大佬能多指教呀,我也会不定时更新项目滴。

呐,各位大佬喜欢的点个赞呀!
喜欢python的同学可以来兴趣交流群一起玩呀~+裙994162403

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值