网络爬虫——针对任意主题批量爬取PDF
Posted skyscrapering
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络爬虫——针对任意主题批量爬取PDF相关的知识,希望对你有一定的参考价值。
|本文为博主原创,转载请说明出处
任务需求:要求通过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的链接下载地址之后就可以通过迅雷批量下载啦!
以上是关于网络爬虫——针对任意主题批量爬取PDF的主要内容,如果未能解决你的问题,请参考以下文章