
Baker是蛋白质设计领域顶尖的科学家,最近老板让搜集一下他的全部文献,就使用爬虫技术全部收集了。
简单暴力总共291篇
这是网站:
https://www.bakerlab.org/index.php/publications/?limit=1
原始网站
#导入各种包,没有的自己安装
import requests
import bs4
from bs4 importBeautifulSoup
from fake_useragentimport UserAgent
import wget
import numpy as np
from multiprocessingimport Pool
import re
#用于拆分列表,原因是每个进程只容许下载9次,没得办法,我只能开30多个进程一起下载了,每个进程下载9篇文献
defsplit_list(pdflist, num):
#用于拆分列表,主要使用多进程处理
b = [pdflist[i:i+num] for i inrange(0,len(pdflist),num)]
return b
#对于每个在list1中的文献链接,直接下载
defget_list_pdf(list1):
for i in list1:
wget.download(i)
#多进程,创建进程池下载
defmulit_get_pdf(urllist,num,core):
p=Pool(core)
split_pdf=split_list(urllist,num)
for i in range(len(split_pdf)):
p.apply_async(get_list_pdf,args=(split_pdf[i],))
p.close()
p.join()
if __name__ =='__main__':
#总共就只有10页翻转,设计10个链接
numlist=np.linspace(1,10,10,dtype=int)
url='https://www.bakerlab.org/index.php/publications/?limit='
urllist=[ url+str(i) for i in numlist ]
#爬取每个页面的pdf链接,最终集中在pdflist中
pdflist = []
for i in urllist:
ua=UserAgent(use_cache_server=False)
headers={"User-Agent":ua.random}
html = requests.get(i,headers=headers)
soup =BeautifulSoup(html.content,"html.parser")
linklist = []
for x in soup.find_all('a'):
link = x.get('href')
if link:
linklist.append(link)
for i in linklist:
if re.search(r'pdf',i):
pdflist.append(i)
#开始正式下载,开启20个进程
mulit_get_pdf(pdflist,9,20)
#最后下载了287篇,我找时间传到百度云上