python網絡爬取個人學習指南-(五)

**************************************************************************************************************

author:keyinfo

date:2025-09-09 23:50

title:網絡信息爬取之多聯級標題內容點擊

**************************************************************************************************************

(到此已經完成可以初步對頁面多級鏈接進行爬取并且寫入到文件里面了,接下來可以對防爬措施的繞過和內容再精細化篩選)

對AI的提問:

問:TypeError: 'dict' object is not callable錯誤
場景 1:誤用圓括號 () 訪問字典(最常見)
場景 2:變量名與字典類型 dict 重名
場景 3:字典方法調用錯誤(少了括號或多了括號)
場景 4:函數/變量名與字典混淆
總結:如何避免此錯誤?
訪問字典鍵時用 [],而非 ():my_dict[key] 或 my_dict.get(key) 。
不要用 dict 作為變量名:避免覆蓋內置類型。
區分對象和方法調用:方法調用需加 ()(如 my_dict.keys() ),而對象本身(如字典、列表)不能加 ()。
檢查變量類型:如果不確定變量類型,可用 print(type(my_var)) 確認,避免將非函數對象當作函數調用。

源代碼經由AI進行調優、添加上注釋

核心代碼:

代碼段1:

        # 提取所有 <a> 標簽中的 href 鏈接 for link in soup.find_all("a"): href = link.get("href") # 過濾無效鏈接if not href or href.startswith(("#",  "javascript:", "mailto:")):continue # 拼接完整 URL full_url = f"{url.rstrip('/')}/{href.lstrip('/')}" collected_links.append(full_url) 

代碼段2:

def save_links_to_file(links, file_path, buffer_size=1000):seen = set()buffer = []# 讀取已有鏈接,防止重復寫入try:with open(file_path, "r", encoding="utf-8") as f:seen.update(line.strip()  for line in f)except FileNotFoundError:pass# 處理每個鏈接for link in links:if link in seen:continueseen.add(link) buffer.append(f"{link}\n") # 緩存滿則寫入文件if len(buffer) >= buffer_size:with open(file_path, "a", encoding="utf-8") as f:f.writelines(buffer) buffer = []# 寫入剩余鏈接 if buffer:with open(file_path, "a", encoding="utf-8") as f:f.writelines(buffer) 

完整代碼:

import time
from urllib.request  import urlopen, Request
from urllib.parse  import urlparse 
from bs4 import BeautifulSoup
from urllib.error  import URLError, HTTPError# 記錄程序開始時間
start_time = time.perf_counter() def fetch_url(url, headers, collected_links):try:# 構建請求對象 req = Request(url, headers=headers)# 發起請求并讀取響應內容with urlopen(req) as response:content = response.read() status_code = response.getcode() # 使用 BeautifulSoup 解析 HTMLsoup = BeautifulSoup(content, "lxml")# 提取所有 <a> 標簽中的 href 鏈接 for link in soup.find_all("a"): href = link.get("href") # 過濾無效鏈接if not href or href.startswith(("#",  "javascript:", "mailto:")):continue # 拼接完整 URL full_url = f"{url.rstrip('/')}/{href.lstrip('/')}" collected_links.append(full_url) # 打印成功信息print(f"URL: {url}")print(f"Status: {status_code}")print(f"描述: {'成功' if status_code == 200 else '未知'}")except HTTPError as e:print(f"HTTP 錯誤: URL={url}, 狀態碼={e.code},  原因={e.reason}") except URLError as e:print(f"URL 錯誤: URL={url}, 原因={e.reason}") except Exception as e:print(f"請求失敗: {e}")return collected_linksdef extract_base_url(url):parsed = urlparse(url)base_url = f"{parsed.scheme}://{parsed.netloc}" return base_urldef save_links_to_file(links, file_path, buffer_size=1000):seen = set()buffer = []# 讀取已有鏈接,防止重復寫入try:with open(file_path, "r", encoding="utf-8") as f:seen.update(line.strip()  for line in f)except FileNotFoundError:pass# 處理每個鏈接for link in links:if link in seen:continueseen.add(link) buffer.append(f"{link}\n") # 緩存滿則寫入文件if len(buffer) >= buffer_size:with open(file_path, "a", encoding="utf-8") as f:f.writelines(buffer) buffer = []# 寫入剩余鏈接 if buffer:with open(file_path, "a", encoding="utf-8") as f:f.writelines(buffer) if __name__ == "__main__":# 用戶輸入input_url = input("請輸入網址:")output_path = input("請輸入保存路徑(例如:./links.txt ):")# 提取基礎 URLbase_url = extract_base_url(input_url)# 設置請求頭headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Referer": base_url,"Host": base_url[8:] if base_url.startswith("https://")  else base_url[7:],}# 存儲所有鏈接all_links = [base_url]# 獲取頁面鏈接fetch_url(base_url, headers, all_links)# 保存鏈接到文件save_links_to_file(all_links, output_path)# 打印運行時間end_time = time.perf_counter() print(f"程序共計運行:{end_time - start_time:.4f}秒")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921950.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921950.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921950.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RAG - 檢索增強生成

第一部分&#xff1a;RAG 詳解一、RAG 是什么&#xff1f;RAG&#xff08;Retrieval-Augmented Generation&#xff0c;檢索增強生成&#xff09;是一種將信息檢索&#xff08;或知識檢索&#xff09;與大語言模型&#xff08;LLM&#xff09;的生成能力相結合的技術框架。它的…

大數據畢業設計選題推薦-基于大數據的分化型甲狀腺癌復發數據可視化分析系統-Spark-Hadoop-Bigdata

?作者主頁&#xff1a;IT研究室? 個人簡介&#xff1a;曾從事計算機專業培訓教學&#xff0c;擅長Java、Python、微信小程序、Golang、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦??? Java項目 Python…

Spring Bean掃描

好的&#xff0c;沒有問題。基于我們之前討論的內容&#xff0c;這是一篇關于 Spring Bean 掃描問題的深度解析博客。Spring Bean掃描作者&#xff1a;Gz | 發布時間&#xff1a;2025年9月9日&#x1f3af; Spring如何找到你的Bean&#xff1f; 首先要理解原理。Spring的組件掃…

【 運維相關】-- HTTP 壓測/負載發生器之新秀 oha

目錄 oha 項目分析&#xff08;hatoo/oha&#xff09; 一、概述 二、安裝 三、快速上手 三、常用參數&#xff08;摘選&#xff09; 四、輸出解讀&#xff08;終端 TUI&#xff09; 五、與其它工具對比 六、最佳實踐 七、注意事項 八、參考 oha 項目分析&#xff08;h…

淘寶閃購基于FlinkPaimon的Lakehouse生產實踐:從實時數倉到湖倉一體化的演進之路

摘要&#xff1a;本文整理自淘寶閃購(餓了么)大數據架構師王沛斌老師在 Flink Forward Asia 2025 城市巡回上海站的分享。引言在數字化轉型的浪潮中&#xff0c;企業對實時數據處理的需求日益增長。傳統的實時數倉架構在面對業務快速變化和數據規模爆炸性增長時&#xff0c;逐漸…

Android應用添加日歷提醒功能

功能 在安卓應用里調用系統日歷&#xff0c;直接創建一個帶提醒的日歷事件&#xff0c;甚至不需要跳轉到日歷界面&#xff0c;只需要獲取系統日歷的讀取權限即可。 需要的權限 在AndroidManifest.xml里添加 <uses-permission android:name"android.permission.READ_CAL…

?Git Bisect 二分查找定位錯誤總結

# Git Bisect 二分查找指南## 1. 基本原理&#xff08;ASCII示意圖&#xff09; 假設提交歷史是一條時間線&#xff0c;Ggood&#xff08;正常&#xff09;&#xff0c;Bbad&#xff08;異常&#xff09;&#xff1a;提交順序: G --- G --- G --- B --- B --- B | | | 初始正常…

ThingsKit物聯網平臺 v2.0.0 發布|前端UI重構、底層架構升級

v2.0.0 Release發布日期&#xff1a;2025/08/25 代碼標簽&#xff1a;v2.0.0_Release&#x1f947; 新增功能國標級聯&#xff08;支持上級、下級國標級聯&#xff09;視頻回放、錄像計劃&#xff08;用戶可以通過錄像計劃生成對應的視頻回放并查看&#xff09;Modbus_TCP協…

Lua > Mac Mini M4安裝openresty

Mac Mini M4安裝openresty 主要參考 https://www.cnblogs.com/helios-fz/p/15703260.html brew uninstall nginxbrew update brew install pcre openssl #brew install geoip# brew tap openresty/brew # brew install openresty # brew install openresty/brew/openresty# VER…

【多線程案例】:單例模式

多線程案例8.1 單例模式餓漢模式懶漢模式懶漢模式-單線程版懶漢模式-多線程版懶漢模式-多線程版(改進)8.1 單例模式 單個實例. 在一個 java 進程中, 要求指定的類,只能有唯–個實例。&#xff08;嘗試 new 多個實例的時候, 就會直接編譯報錯&#xff09; 單例模式是校招中最常…

【Python/Pytorch】-- 貝葉斯定理

文章目錄 文章目錄01 貝葉斯定理的理解02 在MRI重建領域應用01 貝葉斯定理的理解 貝葉斯定理的基本公式&#xff1a;P(A|B)P(B|A)*P(A) / P(B) 首先是如何理解這個公式&#xff1f; 在B事件發生的條件下&#xff0c;A發生的概率 P(A|B) 在B事件發生的條件下&#xff0c;A和B同…

子網掩碼的隱形陷阱:為何能ping通卻無法HTTPS訪問

問題現象深度解析在近期企業網絡維護中&#xff0c;運維團隊發現一個具有教學意義的典型案例&#xff1a;某臺部署在10.165.111.0/24網段的業務服務器&#xff08;10.165.111.71&#xff09;可以成功ping通目標中間件主機(10.165.110.11)&#xff0c;但通過HTTPS協議訪問https:…

【ArcGIS】如何編輯圖層的屬性表

GIS按屬性選擇后刪除所選項呈現灰色_arcgis刪除字段灰色-CSDN博客

大數據各組件flume,datax,presto,DolphinScheduler,findBI在大數據數倉架構中的作用和功能。

一、數據倉庫核心價值鋪墊在講具體技術前&#xff0c;先明確數據倉庫&#xff08;Data Warehouse&#xff0c;簡稱數倉&#xff09; 的核心作用&#xff1a; 數據倉庫是 “整合企業多源數據、按業務主題組織、支持決策分析” 的結構化數據存儲體系&#xff0c;核心價值是打破數…

React From表單使用Formik和yup進行校驗

一、Formik的使用 官方文檔地址&#xff1a;https://formik.org/docs/tutorial#validation 首先安裝依賴 yarn add formik2.導入并初始化 import { useFormik } from formik; initialValues&#xff1a;初始化 輸入框的密碼和賬號 onSubmit&#xff1a;當點擊提交按鈕時&am…

netty-scoket.io路徑配置

1、服務端代碼 package com.yh.service.socket;import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.store.RedissonStoreFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory…

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題 2025/9/5 15:44緣起&#xff1a;榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏。 按 POWER按鍵 關機之后&#xff0c;2s之內再次短按 POWER按鍵&#xff0c;開機之后屏會抖動。 2s后短按…

正態分布 - 計算 Z-Score 的 無偏估計

正態分布 - 計算 Z-Score 的 無偏估計 flyfish Z-Score公式與計算步驟 1 公式&#xff08;樣本Z-Score&#xff09; 實際應用中&#xff0c;我們幾乎不知道“總體均值/標準差”&#xff0c;所以常用樣本數據計算&#xff1a; zixi?xˉsz_i \frac{x_i - \bar{x}}{s}zi?sxi??…

ai生成文章,流式傳輸(uniapp,微信小程序)

1.環境nutui-uniappvue3tsunocss2.功能源碼包含ai生成邏輯&#xff0c;內容生成實時打字機功能&#xff0c;ai數據處理等<script setup lang"ts"> import {queryAIParams, } from /api/pagesA import { submitFn } from /api/aiimport Navbar from /component…

Linux設備內存不足如何處理

[rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 31208 14317 1280 1551 15610 14657 Swap: 15927 2781 13146 [rootlocalhost ~]#從 free -m 輸出來看&…