在寫爬蟲的時候,我們會遇到有的網頁鏈接是不規則的。今天我寫爬蟲練習的時候,就遇到了這個情況。后來我發現用 lxml 可以很好的去出鏈接,然后我靈光一閃,就去試了試,果然。把每次找到的鏈接傳給一個成員變量保存,這樣就可以直接在下次爬取的時候調用這個變量去訪問下一個要爬取的頁面了
# -*- coding = utf-8 -*- # @Time : 2021/11/1 17:19 # @Author : 海綿擺擺嘉心糖 # @File : 筆趣閣_一劍獨尊.py # @Software : PyCharm import time import requests import os from lxml import etree name = "牛馬小說_一劍獨尊/" url_end = "/book/4652/1.html" def main(): # 定義首頁的 URL baseurl = "https://www.biquge7.com" get_data(baseurl) def get_data(baseurl): global url_end for i in range(2535): url = baseurl + url_end # 調用請求函數獲取網頁信息 html = get_html(url) # 對返回的信息進行解析 xml = etree.HTML(html) # 獲取章節標題 h1_title = xml.xpath('.//div[@class="book reader"]/div[@class="content"]/h1[@class="wap_none"]/text()') # 獲取下一頁的鏈接 next_href = xml.xpath('.//div[@class="book reader"]/div[@class="content"]/div[@class="Readpage pc_none"]/a[@class="Readpage_down js_page_down"]/@href') # 獲取正文內容 text = xml.xpath('//*[@id="chaptercontent"]/text()') if not os.path.exists(name): print(f"沒有{name}這個目錄,正在創建>>>>>>>>>") os.mkdir(name) with open(f"{name}{h1_title[0]}.txt", "w", encoding="utf-8") as file_obj: for t in text: file_obj.write(f"{t}\n") print(f"{h1_title[0]}的爬取已完成,正在進入下一章的爬取>>>>>>>>>>>>>") url_end = next_href[0] # 休眠一秒后執行 time.sleep(1) def get_html(url): # 頭部信息,告訴服務器你是以什么樣的身份去訪問它 user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" # 定義頭部信息 headers = {"User-Agent": user_agent} # 定義一個字符串變量,用來接收網頁信息 html = " " try: # 用 get 的方式請求網頁 response = requests.get(url=url, headers=headers) # 如果出現異常主動報出異常 response.raise_for_status() # 解碼 html = response.content.decode("utf-8") except requests.RequestException as e: # 打印異常信息 print(e) return html if __name__ == '__main__': main() print("end>>>>>")