摘要:任務(wù)批量抓取網(wǎng)頁(yè)文件有一個(gè),里面有數(shù)千條指向下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的文件。利用,具體邏輯是正常情況下,按次序下載文件,如果同一文件,下載失敗次數(shù)超過(guò),則跳過(guò),下載下一個(gè)文件,并記錄錯(cuò)誤信息。
任務(wù):批量抓取網(wǎng)頁(yè)pdf文件
有一個(gè)excel,里面有數(shù)千條指向pdf下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的pdf文件。
python環(huán)境:
anaconda3讀取excel,獲取網(wǎng)頁(yè)地址
openpyxl
beautifulsoup4
使用openpyxl庫(kù),讀取.xslx文件;
(曾嘗試使用xlrd庫(kù)讀取.xsl文件,但無(wú)法獲取超鏈接)
安裝openpyxl
pip install openpyxl
提取xslx文件中的超鏈接
示例文件構(gòu)造
公告日期 | 證券代碼 | 公告標(biāo)題 |
---|---|---|
2018-04-20 | 603999.SH | 讀者傳媒:2017年年度報(bào)告 |
2018-04-28 | 603998.SH | 方盛制藥:2017年年度報(bào)告 |
def readxlsx(path): workbook = openpyxl.load_workbook(path) Data_sheet = workbook.get_sheet_by_name("sheet1") rowNum = Data_sheet.max_row #讀取最大行數(shù) c = 3 # 第三列是所需要提取的數(shù)據(jù) server = "http://news.windin.com/ns/" for row in range(1, rowNum + 1): link = Data_sheet.cell(row=row, column=c).value url = re.split(r""", link)[1] print(url) downEachPdf(url, server)獲取網(wǎng)頁(yè)pdf下載地址
進(jìn)入讀者傳媒:2017年年度報(bào)告,在chrome瀏覽器中可以按F12查看網(wǎng)頁(yè)源碼,以下截取部分源碼:
附件:603999讀者傳媒2017年年度報(bào)告.pdf (2.00M)  
可見(jiàn),herf下載鏈接在a標(biāo)簽中,可以通過(guò)解析html源碼獲取下載鏈接。
這里使用BeautifulSoup解析html。
Beautiful Soup 是用Python寫(xiě)的一個(gè)HTML/XML的解析器,它可以很好的處理不規(guī)范標(biāo)記并生成剖析樹(shù)(parse tree)。 它提供簡(jiǎn)單又常用的導(dǎo)航(navigating),搜索以及修改剖析樹(shù)的操作。它可以大大節(jié)省你的編程時(shí)間。
安裝BeautifulSoup4
pip install beautifulsoup4
獲取pdf下載鏈接并下載
def downEachPdf(target, server): req = requests.get(url=target) html = req.text bf = BeautifulSoup(html, features="lxml") a = bf.find_all("a") for each in a: url = server + each.get("href") print("downloading:", each.string, url) urllib.request.urlretrieve(url, "./report/" + each.string)同一ip重復(fù)訪問(wèn)同一服務(wù)器被拒絕
利用以上方法已經(jīng)能夠?qū)崿F(xiàn)批量網(wǎng)頁(yè)pdf的下載了,但是,在實(shí)際操作過(guò)程中,會(huì)發(fā)現(xiàn)如果同一ip頻繁地訪問(wèn)某一服務(wù)器,訪問(wèn)會(huì)被拒絕(可能被誤判為DOS攻擊,通常做了Rate-limit的網(wǎng)站都會(huì)停止響應(yīng)一段時(shí)間,你可以Catch這個(gè)Exception,sleep一段時(shí)間,參考)。因此,對(duì)下載邏輯進(jìn)行了調(diào)整。
利用try-catch,具體邏輯是:正常情況下,按次序下載文件,如果同一文件,下載失敗次數(shù)超過(guò)10,則跳過(guò),下載下一個(gè)文件,并記錄錯(cuò)誤信息。
import os import time def downloadXml(flag_exists, file_dir, file_name, xml_url): if not flag_exists: os.makedirs(file_dir) local = os.path.join(file_dir, file_name) try: urllib.request.urlretrieve(xml_url, local) except Exception as e: print("the first error: ", e) cur_try = 0 total_try = 10 if cur_try < total_try: cur_try += 1 time.sleep(15) return downloadXml(flag_exists, file_dir, file_name, xml_url) else: print("the last error: ") with open(test_dir + "error_url.txt", "a") as f: f.write(xml_url) raise Exception(e)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/53683.html
摘要:任務(wù)批量抓取網(wǎng)頁(yè)文件有一個(gè),里面有數(shù)千條指向下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的文件。利用,具體邏輯是正常情況下,按次序下載文件,如果同一文件,下載失敗次數(shù)超過(guò),則跳過(guò),下載下一個(gè)文件,并記錄錯(cuò)誤信息。 任務(wù):批量抓取網(wǎng)頁(yè)pdf文件 有一個(gè)excel,里面有數(shù)千條指向pdf下載鏈接的網(wǎng)頁(yè)地址,現(xiàn)在,需要批量抓取這些網(wǎng)頁(yè)地址中的pdf文件。python環(huán)境: anaco...
摘要:獲取獲取上下文句柄執(zhí)行計(jì)算銷毀句柄除此之外,還可以使用意為在瀏覽器環(huán)境執(zhí)行腳本,可傳入第二個(gè)參數(shù)作為句柄,而則針對(duì)選中的一個(gè)元素執(zhí)行操作。 我們?nèi)粘J褂脼g覽器或者說(shuō)是有頭瀏覽器時(shí)的步驟為:?jiǎn)?dòng)瀏覽器、打開(kāi)一個(gè)網(wǎng)頁(yè)、進(jìn)行交互。 無(wú)頭瀏覽器指的是我們使用腳本來(lái)執(zhí)行以上過(guò)程的瀏覽器,能模擬真實(shí)的瀏覽器使用場(chǎng)景。 有了無(wú)頭瀏覽器,我們就能做包括但不限于以下事情: 對(duì)網(wǎng)頁(yè)進(jìn)行截圖保存為圖片或 ...
摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲(chóng)方案后端掘金前言爬蟲(chóng)和反爬蟲(chóng)日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲(chóng)修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲(chóng)修煉之道 上篇 爬蟲(chóng)修煉之道——編寫(xiě)一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)主要講解了如何使用python編寫(xiě)一個(gè)可以下載多頁(yè)面的爬蟲(chóng),如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...
摘要:,引言晚上翻看網(wǎng)絡(luò)數(shù)據(jù)采集這本書(shū),看到讀取內(nèi)容的代碼,想起來(lái)前幾天集搜客剛剛發(fā)布了一個(gè)抓取網(wǎng)頁(yè)內(nèi)容的抓取規(guī)則,這個(gè)規(guī)則能夠把內(nèi)容當(dāng)成來(lái)做網(wǎng)頁(yè)抓取。,把轉(zhuǎn)換成文本的源代碼下面的源代碼,讀取文件內(nèi)容互聯(lián)網(wǎng)上的或是本地的,轉(zhuǎn)換成文本,打印出來(lái)。 showImg(https://segmentfault.com/img/bVwER8); 1,引言 晚上翻看《Python網(wǎng)絡(luò)數(shù)據(jù)采集》這本書(shū),看...
摘要:目標(biāo)網(wǎng)站西瓜視頻項(xiàng)目功能下載頭條號(hào)維辰財(cái)經(jīng)下的最新個(gè)視頻項(xiàng)目地址地址姊妹項(xiàng)目批量下載美女圖集簡(jiǎn)介一般批量爬取視頻或者圖片的套路是,使用爬蟲(chóng)獲得文件鏈接集合,然后通過(guò)等方法逐個(gè)保存文件。然而在批量下載時(shí),逐個(gè)手動(dòng)的獲取視頻鏈接顯然不可取。 目標(biāo)網(wǎng)站:西瓜視頻 項(xiàng)目功能:下載頭條號(hào)【維辰財(cái)經(jīng)】下的最新20個(gè)視頻 項(xiàng)目地址:Github 地址 姊妹項(xiàng)目:批量下載美女圖集 簡(jiǎn)介 一般批量...
閱讀 1684·2021-09-26 10:00
閱讀 2943·2021-09-06 15:00
閱讀 3550·2021-09-04 16:40
閱讀 2319·2019-08-30 15:44
閱讀 727·2019-08-30 10:59
閱讀 1900·2019-08-29 18:34
閱讀 3628·2019-08-29 15:42
閱讀 2305·2019-08-29 15:36