还记得在大学时候写论文的时候,因为写文章需要的材料比较多,如果能有很多的链接资料支撑是再好不过了。不过那时候还没有接触到python,对于数据的爬取还没有这方面的概念。既然小编和各位小伙伴们正好在学习这方面的模块,我们就一起试着用python爬虫下载链接,来比比看谁下载的数量最多吧。
下载论文材料步骤
1、要利用headers拉动请求,模拟成浏览器去访问网站,跳过最简单的反爬虫机制。
2、获取网页内容,保存在一个字符串content中。
3、构造正则表达式,从content中匹配关键词pattern获取下载链接。需要注意的是,网页中的关键词出现了两遍(如下图),所以我们要利用set()函数清除重复元素。
4、第三步是遍历set之后的结果,下载链接。
5、设置time.sleep(t),无sleep间隔的话,网站认定这种行为是攻击,所以我们隔一段时间下载一个,反反爬虫。
python下载论文材料具体代码
import urllib.request# url request import re # regular expression import os # dirs import time ''' url 下载网址 pattern 正则化的匹配关键词 Directory 下载目录 ''' def BatchDownload(url,pattern,Directory): # 拉动请求,模拟成浏览器去访问网站->跳过反爬虫机制 headers = {'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'} opener = urllib.request.build_opener() opener.addheaders = [headers] # 获取网页内容 content = opener.open(url).read().decode('utf8') # 构造正则表达式,从content中匹配关键词pattern raw_hrefs = re.findall(pattern, content, 0) # set函数消除重复元素 hset = set(raw_hrefs) # 下载链接 for href in hset: # 之所以if else 是为了区别只有一个链接的特别情况 if(len(hset)>1): link = url + href[0] filename = os.path.join(Directory, href[0]) print("正在下载",filename) urllib.request.urlretrieve(link, filename) print("成功下载!") else: link = url +href filename = os.path.join(Directory, href) print("正在下载",filename) urllib.request.urlretrieve(link, filename) print("成功下载!") # 无sleep间隔,网站认定这种行为是攻击,反反爬虫 time.sleep(1) #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/', # '(Storm-Data-Export-Format.docx)', # 'E:\stormevents\csvfiles') #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/', # '(Storm-Data-Export-Format.pdf)', # 'E:\stormevents\csvfiles') #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/', # '(StormEvents_details-ftp_v1.0_d(\d*)_c(\d*).csv.gz)', # 'E:\stormevents\csvfiles') #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/', # '(StormEvents_fatalities-ftp_v1.0_d(\d*)_c(\d*).csv.gz)', # 'E:\stormevents\csvfiles') #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/', # '(StormEvents_locations-ftp_v1.0_d(\d*)_c(\d*).csv.gz)', # 'E:\stormevents\csvfiles') #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/legacy/', # '(ugc_areas.csv)', # 'E:\stormevents\csvfiles\legacy') #BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/', # '(ugc_areas.csv)', # 'E:\stormevents\csvfiles')
以上就是小编用python爬虫下载链接的代码了,目前已经收获了不少的网页链接,不知道小伙伴们的成果怎么样了~想要下载链接的小伙伴,也可以试试这个方法。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试