|本文为博主原创,转载请说明出处
任务需求:要求通过Google针对任意关键字爬取大量PDF文档,如K-means,KNN,SVM等。
环境:Anaconda3——Windows7-64位——Python3.6——lantern——迅雷极速版——360浏览器
先贴代码
1 # -*- coding: utf-8 -*- 2 import urllib.request 3 import re#导入正则表达式包 4 import time 5 6 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 url_part_1="https://www.google.co.jp/search?q=svm+filetype:pdf&lr=&hl=zh-CN&as_qdr=all&ei=VIdnWZ3SGIS18QXW3aAg&start=" 8 url_part_2="&sa=N&biw=1745&bih=810" 9 Page_number=28 #每一个搜索结果的页数,这个针对不同的主题结果会不一样 10 #这几行代码针对不同的主题要进行相应的修改,稍后再解释url_part_1和url_part_2的意思 11 #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 12 13 timeout=20 #请求时间20秒 14 sleep_download_time=5 #爬一个网页休息5秒钟,这样有利于不被Google认为是攻击行为,当然,这只是一个方面 15 url_list_total=[]#将所有pdf文档的链接地址放在这个列表当中 16 user_agent = ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36‘ 17 #这个是我的360浏览器的user_agent,按F12可查 18 19 for i in range(0,Page_number): 20 url_page=url_part_1+str(i*10)+url_part_2#拼接成每个Google搜索结果的页面地址 21 headers = { ‘User-Agent‘ : user_agent,‘Referer‘:url_page} 22 request= urllib.request.Request(url_page,headers=headers) 23 try:#可能会出现异常[WinError 10054] 24 page = urllib.request.urlopen(request,timeout=timeout) 25 except urllib.error.URLError as e: 26 print(e.reason) 27 28 html= page.read().decode(‘utf-8‘)#必须要有.decode(‘utf-8‘) 29 pattern = re.compile(‘<h3 class="r".*?<a href="(.*?)" onmousedown‘)#这个表达式主要是为了获取pdf的链接地址 30 url_list=re.findall(pattern,html) 31 32 for line in url_list[:]: 33 url_list_total.append(line) 34 url_list=[] 35 print(page.getcode()) 36 print(i) 37 page.close() 38 html=[] 39 time.sleep(sleep_download_time)#隔几秒再运行 40 41 f=open(‘url_list_total.txt‘,‘w‘) 42 for url in url_list_total: 43 f.write(url) 44 f.write(‘\n‘) 45 f.close()
下面解释一下7-8行,通过Google搜索的结果的地址是有规律的,如通过关键字svm filetype:pdf返回的结果的第一页地址如下
https://www.google.co.jp/search?q=svm+filetype:pdf&lr=&hl=zh-CN&as_qdr=all&ei=VIdnWZ3SGIS18QXW3aAg&start=10&sa=N&biw=1745&bih=810
做如下拆分
"https://www.google.co.jp/search?q=svm+filetype:pdf&lr=&hl=zh-CN&as_qdr=all&ei=VIdnWZ3SGIS18QXW3aAg&start=" + 10 + "&sa=N&biw=1745&bih=810"
分成三部分,方便后面进行迭代。
这样得到所有的pdf的链接下载地址之后就可以通过迅雷批量下载啦!
时间: 2024-12-25 21:58:21