网络爬虫——针对任意主题批量爬取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的主要内容,如果未能解决你的问题,请参考以下文章

爬取猫眼及可视化

Python高级应用程序设计任务

爬取B站热门视频排行榜

爬取当当网新书排行及数据分析

爬虫遇到各种不同url怎么爬取

爬取城市GDP排名