【Python】一个简单的爬取万方数据库文章基础信息的爬虫

【Python】一个简单的爬取万方数据库文章基础信息的爬虫

源代码地址:点我进入GitHub项目网址.

因为课程需要,需要爬取某个领域文章的关键字以及作者等基础信息,因此写了一段简单的小爬虫来获取一些基础信息并存储在excel表格中,由于懒得和知网的反爬周旋以及偶然发现万方并不限制爬虫(可能不是那么强),所以转战万方爬取。速度大概是2小时5万篇,接下来会进行改进,加快速度,希望大家支持~

需要的库

  • pandas
  • numpy
  • bs4
  • urllib.request
  • csv,codecs
  • xlsxwriter
  • re
  • random
  • os
  • time

分析网页

首先打开万方知识库,随便搜索一个关键词,如互联网,进入搜索结果界面:

可以看到这个页面包含我们想要获取的所有信息:作者、题目、关键字。 第一步,我们想知道翻页的机制,首先点击第二页,先看网页的url有没有变化,发现由http://s.wanfangdata.com.cn/Paper.aspx?q=%E4%BA%92%E8%81%94%E7%BD%91&f=top&p=变为http://s.wanfangdata.com.cn/Paper.aspx?q=%E4%BA%92%E8%81%94%E7%BD%91&f=top&p=2,也就是说万方的url的翻页机制的关键是p=‘num’,这个num就是对应的页码。
了解了翻页机制后,我们就可以查看网页源代码,看看我们需要的信息在哪里:

在知道了以上信息后就可以编写爬取的代码了。

关键代码

发送请求

        head = random.choice(user_agents) //随机选择user_agents
				kv = {'User-Agent':head}
				url = url_original+ str(i)
				resp = urlrequest.Request(url,headers =kv)
				urlrequest.install_opener(opener)
				paper_content = urlrequest.urlopen(resp).read()

BS

然后使用BeautifulSoup对网页进行解析:

        			paper_html = paper_content.decode('utf-8')
				paper_soup = BeautifulSoup(paper_html,'html.parser')
				paper_title_list = []

爬取

		for paper in allpaper_list:
					paper_data = paper.find(class_='record-title')
					paper_title = paper_data.find('a',class_='title')
					paper_title_str = str(paper_title)
					paper_title_string = re.findall(re_words,paper_title_str)

使用中间一段爬取title的过程为例,发现源代码中的标题放在<record-title>下的<title>标签下,于是采取find方法提取内容。

反爬

使用代理限制爬取频率这两种办法
Python proxy = random.choice(proxy_list)构建一个代理池,每次爬取时随即使用一个ip,防止被反爬。
Python time.sleep(3)每一次爬取时可以限制速率,每爬取一次暂停3秒钟,如果想获得更好的伪装,可以使用随机数暂停时间。

这个是比较老的版本,更快的新版本再稍后上传,上课之前码字,比较仓促。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值