Python3使用xpath爬取豆丁网文档
生活随笔
收集整理的這篇文章主要介紹了
Python3使用xpath爬取豆丁网文档
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python3使用xpath爬取豆丁網文檔(已不適用,僅供參考)
- 準備工作
- 源代碼
準備工作
首先,我們進入豆丁官網,隨便點擊一篇文檔,進入如下界面:
接著,按“F12”進入開發者工具;找到圖中所示的HTML標簽(可在開發者工具中搜索圖中關鍵詞匯);定位的光標處中src中的鏈接則是我們后續下載需要的URL地址(在瀏覽器中搜索上述地址,就會發現第一頁以圖片的形式呈現在了網頁中,這時我們便可以右鍵進行保存)。
細心的讀者就會發現,這其中是有跡可循的。所有的頁面都會一一對應一個div<id=“page_1,2,……”>,而我們所需要的URL地址都在這一標簽下的img標簽中,所以這就是我們本次要爬的重點。
注意事項:值得注意的是,你進入網站后,會發現網站后續的圖片是沒有刷新出來的,而沒有刷新出來的頁面是沒有上述所說的div標簽,所以是無法爬取的。這是該網站設計的反爬蟲機制,防止你直接通過網址進行爬蟲。
所以,無法通過該網頁的url進行爬取。借鑒筆者前兩篇文章:
爬取百度文庫文檔
爬取原創力文檔
舉一反三,復制開發者工具界面(div id=“contentcontainer”)這一標簽里的源碼(因人而異,讀者也可以復制所有的源碼,但是后續的xpath路徑也要隨之改變)復制到txt文件中,再讀取txt文件(如果讀者有更好的解決辦法,歡迎在評論區交流學習!)
- 值得注意的是,一定要把所有頁面全部加載出來,不然有些頁面就沒有src地址
好的,啰嗦了這么多。下面,讓我們進入源代碼環節(其實,和前面兩篇文章結構一樣,本質上是換湯不換藥)。
源代碼
""" 爬取豆丁文檔網站上的文檔 """ from urllib.request import urlretrieve import time from lxml import etree import numpy as npfrom docx import Document from os import listdir from docx.shared import Inches from docx.shared import Cm import osdir_path = 'F:\PycharmProjects\Scrapy\\results' # 要保存的文件夾目錄# 刪除文件夾下原有的jpg文件 def del_img():for files in os.listdir(dir_path):if files.endswith(".jpg"):os.remove(os.path.join(dir_path, files))# 從html.txt文件中讀取網頁源碼下載圖片,并從數字1按順序依次對圖片命名 def print_img(results):results = etree.HTML(results)content_list = results.xpath('//*[@id="contentcontainer"]/div')for content in content_list:img_url = content.xpath('.//div[1]/div/img/@src')# 設個延時time.sleep(np.random.randint(0, 1))if len(img_url):img_url = img_url[0].strip()img_name = content.xpath('.//div[1]/div/@id')img_name = img_name[0].strip()num = int(img_name[4:])img_name = dir_path + str(num) + '.jpg'# 根據src地址下載圖片,下載目錄默認是當前工作路徑urlretrieve(img_url, img_name)print('打印第', num, '張成功!')# 將圖片加載進word文檔,并保存 def print_docx():docx = Document()# 將文檔的頁面邊距均設為0sections = docx.sectionsfor section in sections:section.top_margin = Cm(0)section.bottom_margin = Cm(0)section.left_margin = Cm(0)section.right_margin = Cm(0)pictures = [fn for fn in listdir(dir_path) if fn.endswith('.jpg')]pictures.sort()pictures.sort(key=lambda x: int(x[:-4]))print(pictures)for img_name in pictures:img_name = dir_path + img_namedocx.add_picture(img_name, height=Inches(11))print(img_name, '添加成功!')# 保存文檔docx_name = '豆丁'docx_name = docx_name + '.docx' # 文檔名字docx.save(docx_name)print(docx_name, '保存成功!')if __name__ == '__main__':with open('html.txt', 'r', encoding='utf-8') as file:data = file.read()# 刪除原有的jpgdel_img()# 下載jpgprint_img(data)# 將jpg導入docxprint_docx()xpath地址不知道的讀者同樣可以參考前面兩篇文章:
爬取百度文庫文檔
爬取原創力文檔
總結
以上是生活随笔為你收集整理的Python3使用xpath爬取豆丁网文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021-07-31
- 下一篇: 一篇文章搞懂什么是测试,测试是干什么的?