python爬蟲初入門——基本庫和寫入方法

1.準備環境

  1. python環境:3.10

2.常用庫

1.請求庫:實現 HTTP 請求操作

  1. requests:基于 urllib 編寫的,阻塞式 HTTP 請求庫,發出一個請求,一直等待服務器響應后,程序才能進行下一步處理。
  2. selenium:自動化測試工具。一個調用瀏覽器的 driver,通過這個庫你可以直接調用瀏覽器完成某些操作,比如輸入驗證碼。

2.解析庫:從網頁中提取信息

  1. Beautifulsoup:html 和 XML 的解析,從網頁中提取信息,同時擁有強大的API和多樣解析方式。
  2. lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
  3. json:可以將數據格式轉化為json格式更便于解析讀取。
  4. re:利用正則表達式提取數據。

3.其他常用庫

  1. fake_useragent庫

引入:from fake_useragent import UserAgent

用法:實現請求頭偽裝

# 請求頭偽裝
ua = UserAgent()
header = {
'User-Agent':ua.chrome}

3.安裝方式

添加庫的方法:

1.Windows+R打開運行,然后輸入CMD進入命令提示符。

2.輸入:where python 。就會反饋出python安裝地址。

3.cd C:\Program Files\Python39\Scripts(cd+安裝目錄下的Scripts文件夾,可以先找到文件夾,以防找錯地址)

4.輸入各種更新語句

更新pip:python -m pip install --upgrade pip

更新某庫(如requests庫):pip install requests

更新某庫指定版本:pip install bert4keras==0.5.9

pip換源

通過pip install添加庫時會因為從國外地址下載,連接速度特別慢。國內一些有擔當的高校和公司會通過建立鏡像源,來幫助國內用戶從其服務器下載,更方便去學習python。

換源語句

換源如:換阿里源語句

pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ 
pip config set global.trusted-host mirrors.aliyun.com

一些其他源

國內源:

清華:Simple Index

阿里云:Simple Index

中國科技大學 Verifying - USTC Mirrors

華中理工大學:http://pypi.hustunique.com/

山東理工大學:Loading...

豆瓣:http://pypi.douban.com/simple/

庫的查詢方法
pip list

我們可以通過命令查看python安裝了哪些庫,cmd直接輸入pip list,可以看到所有庫和版本。

4.發送請求

1.請求準備

  • url請求鏈接,首先是寫入準備要請求的url
  • header請求頭,有些網站會對user-agent進行校驗來區分爬蟲和瀏覽器請求,這里我們可以利用fake_useragent庫里的ua.chrome方法來偽裝我們的user-agent
url = 'http://www.baidu.com'
header = {'User-Agent': ua.chrome
}

2.請求方式

這里我們主要介紹兩種最主要的請求方式

1.get請求
url = 'https://www.baidu.com'
header = {'User-Agent':ua.chrome
}
response = requests.get(url=url,headers=header,params=None)

這里requests.get()后面包含了多個參數,params是攜帶的參數,這里可能涉及到分頁或者其他屬性等等。

查看響應狀態碼和響應文本

print(response.status_code)
print(response.text)

  • 常見的響應狀態碼:

200 ok:請求成功

301 Move Permanently:永久重定向,以前的url已經過期

302 found:臨時重定向

403 Forbidden:服務器拒絕訪問

404 not found:資源未找到

500 Internal Server Error:服務器內部錯誤

這里我們請求百度,響應狀態碼200,請求成功,獲得的文本就是網頁的內容。

2.post請求

這里我們以請求廣州市政府政策為例:

url = 'http://search.gd.gov.cn/api/search/all'
header = {'User-Agent': ua.chrome
}
d = {'gdbsDivision': "440100",'keywords': "人才",'page': 1,'position': "title",'range': "site",'recommand': 1,'service_area': 200,'site_id': "200001",'sort': "time"
}
response = requests.post(url=url, headers=header, data=d)

這里的data是post請求必須攜帶的請求參數,服務器會進行校驗,根據你請求的數據來返回你想要的數據。

3.selenium模擬瀏覽器請求

作用:常用于一些數據屬于懶加載,請求不到完整數據。或者是存在反爬,cookie,wordtoken校驗時無法獲取數據時,模擬真實瀏覽器向服務器發出請求,獲取網頁源代碼再進行解析

a.前置環境

chrome瀏覽器和對應的chromedriver版本(117對應117版本 不能高也不能低)

Chromedriver下載地址:國內鏡像網站CNPM Binaries Mirror

b.發送請求
path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
url = 'https://www.shanghai.gov.cn/'
browser.get(url)

依靠上述代碼,就已經對瀏覽器發出了請求,我們可以通過xpath對頁面上的各種輸入框,按鈕等各種組件進行定位,操控瀏覽器進行數據請求的操作。常常配合time.sleep()來等待服務器數據加載。

path = 'chromedriver.exe'
browser = webdriver.Chrome(path)
url = 'https://www.shanghai.gov.cn/'
browser.get(url)
time.sleep(1)
# 通過xpath定位輸入框
input_area = browser.find_element_by_xpath('//*[@id="search-input"]')
# 定位按鈕
button = browser.find_element_by_xpath('//*[@id="searchBtn"]')
# 往輸入框內輸入內容
input_area.send_keys('人才政策')
# 點擊按鈕
button.click()
time.sleep(1)
# 切換瀏覽器頁面
browser.switch_to_window(browser.window_handles[1])
print(browser.title)
print('finish')
# 關閉瀏覽器
browser.quit()

這時我們進入了頁面,頁面上的數據都可以通過xpath或則bs來進行提取。

5.解析響應數據

1.解析json格式數據

json_data = json.loads(response.text)

直接調用json庫的loads方法,將響應數據解析成json格式數據之后,json_data對象的類型變成了一個dict字典類型,更方便索引讀取響應數據。

2.etree的xpath解析

etree可以解析文本也可以解析HTML超文本標記

tree = etree.HTML(response.text)
# /html/body/div/div[1]/table/tbody/tr[16]/td[2]/a 2-16
# /html/body/div/div[1]/table/tbody/tr[16]/td[4]
for i in range(2,17):title = tree.xpath('/html/body/div/div[1]/table/tbody/tr['+str(i)+']/td[2]/a/text()')[0]href = tree.xpath('/html/body/div/div[1]/table/tbody/tr['+str(i)+']/td[2]/a/@href')[0]ts = tree.xpath('/html/body/div/div[1]/table/tbody/tr['+str(i)+']/td[4]/text()')[0].strip()

這里我們解析HTML通過xpath路徑直接獲取對應的web元素,可以進行多次解析,返回的對象是一個list列表。

可以通過/text()來獲取文本內容,通過/@href來獲取對應的屬性值。

6.數據存儲

1.寫文件

f = open('文件名.txt', mode='w', encoding="utf-8")
f.write('寫入文件的內容')
# 關閉文件 自動刷新寫入內容
f.close()

2.寫入excel表格

# 引入相關庫
import xlwt
import xlrd# 創建workbook對象 工作簿
workbook = xlwt.Workbook(encoding='utf-8')
# 工作表
worksheet = workbook.add_sheet("sheet1", cell_overwrite_ok=True)  # 默認是不可覆蓋 改為可以覆蓋內容 這樣可以實時更新表單
# 設置單元格寬度
worksheet.col(5).width = 256 * 40
worksheet.col(1).width = 256 * 40
# worksheet.col(4).width = 256 * 12
# 寫入標題 
# 第0列 0行 寫入'內容'
worksheet.write(0,0,'內容')
# 保存并命名工作簿
workbook.save('gz.xls')

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

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

相關文章

Sonar掃描C#代碼配置

需要的工具 MSBuild、sonar-scanner-4.6.1.2450-windows、jdk1.8.0_181 下載地址:https://download.csdn.net/download/code12313/91315686 配置sonar的地址 一、環境變量配置 1.新建變量,nameSONAR_RUNNER_MSBUILD_HOME。valueD:\work\dev\dev_serve…

python 在運行時沒有加載修改后的版本

陳舊的Python字節碼 (.pyc 文件):最常見的原因!Python 會把你修改的 .py 文件編譯成 .pyc 字節碼來加速后續運行。有時,即使你修改了 .py 文件,系統可能仍然固執地加載舊的、未被刪除的 .pyc 文件。1. 用“硬編碼探針”強制驗證# …

【會員專享數據】2013-2024年我國省市縣三級逐年SO?數值數據(Shp/Excel格式)

之前我們分享過2013-2024年全國范圍逐年SO?柵格數據(可查看之前的文章獲悉詳情)!該數據來源于韋晶博士、李占清教授團隊發布在國家青藏高原科學數據中心網站上的中國高分辨率高質量近地表空氣污染物數據集。很多小伙伴拿到數據后反饋柵格數據…

出現SSL連接錯誤的原因和解決方案

介紹 SSL連接錯誤是一種常見但關鍵的問題,這可能會阻止客戶端和服務器之間的安全連接。這些錯誤發生在TLS握手過程失敗時,這意味著客戶端和服務器無法建立安全的HTTPS連接。這種失敗可以在SSL/TLS協商過程中的任何階段發生,從初始協議協議到…

vue3 el-date-picker 保存后 日期減一問題

在使用 el-date-picker(Element UI 的日期選擇器組件)時,如果你發現日期在保存到后臺后自動減一,這通常是由于時區差異或者是時間格式解析問題導致的。這里有一些可能的解決方案:1. 檢查前端發送的日期格式確保你在前端…

什么是IP關聯?跨境賣家如何有效避免IP關聯?

一位深圳賣家曾管理30個亞馬遜店鋪賬號,某日清晨發現所有賬號被批量封禁——原因竟是平臺檢測到這些賬號長期共享同一IP地址,判定為“IP關聯”。而在跨境領域如亞馬遜、eBay、Shopee、TikTok等平臺),對于IP關聯的判定都是比較嚴格…

Redis集群方案——哨兵機制

Redis Sentinel(哨兵)是Redis官方提供的高可用性(HA)解決方案,用于管理Redis主從架構并實現自動故障轉移。一、集群結構和作用哨兵是一個分布式系統,由多個哨兵節點組成:哨兵的作用如下:監控:Se…

1.2.3_2 TCP/IP模型

在這個視頻中,我們要探討TCP/IP模型。對于TCP/IP模型考試的要求是這樣的,首先我們需要記住它各個層次的名稱和順序,以及我們需要了解TCP/IP 模型和OSI參考模型,它們在設計理念上有哪些區別,設計理念的區別又導致了TCP/…

EVOLVEpro安裝使用教程-蛋白質語言模型驅動的快速定向進化

寫在前面:蛋白質是生命活動的基石,其功能和序列之間的復雜關系長期以來吸引著科學家們的關注。盡管深度突變掃描等實驗方法可以解析蛋白質突變的功能影響,但這些技術的應用范圍局限于序列空間的一小部分。近年來,基于蛋白質語言模…

【Linux】Rocky Linux 清華鏡像源安裝 GitLab

使用清華鏡像源安裝 GitLab 地址:清華鏡像源 1. 搜索 gitlab,我們選擇 gitlab-ce 社區版進行安裝 2. 新建 /etc/yum.repos.d/gitlab-ce.repo,內容為 注意:el$releasever 是清華鏡像源內的文件夾版本 [gitlab-ce] nameGitlab C…

【龍澤科技】新能源汽車維護與動力蓄電池檢測仿真教學軟件【吉利幾何G6】

產品簡介新能源汽車維護與動力蓄電池檢測仿真教學軟件是依托《全國職業院校技能大賽》“新能源汽車維修”賽項中“新能源汽車維護與動力蓄電池檢測” 競賽模塊,自主開發的一款仿真教學軟件。軟件采用仿真技術對車輛進行指定維護作業,并對動力蓄電池總成進…

UE5多人MOBA+GAS 18、用對象池來設置小兵的隊伍的生成,為小兵設置一個目標從己方出生點攻打對方出生點,優化小兵的血條UI

文章目錄根據小兵隊伍更換小兵的皮膚管理小兵的生成使用對象池來管理小兵的生成為小兵設置一個目標小兵生成完整代碼調整一下小兵的UI根據小兵隊伍更換小兵的皮膚 懶得開UE了,增加一個Minion類繼承基類角色CCharacter // 幻雨喜歡小貓咪#pragma once#include &qu…

Clojure持久化數據結構的底層實現

文章目錄一、Clojure的持久化數據結構二、向量(Vector)/Map的底層結構?1. HAMT 哈希數組映射字典樹(1)簡介(2)HAMT 的核心思想(3)HAMT 的結構?a. 基本組成?b. 樹的分支因子?(4)H…

面試150 二叉樹展開為鏈表

思路 思路:使用列表存儲先序遍歷的相關節點。然后遍歷列表,分別獲取前驅節點和當前節點,將前驅節點的左指針指向空,前驅節點的右指針指向當前節點。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, …

代碼隨想錄算法訓練營第十七天

目錄 LeetCode.654 最大二叉樹 題目鏈接 最大二叉樹 題解 解題思路 LeetCode.617 合并二叉樹 題目鏈接 合并二叉樹 題解 解題思路 LeetCode.700 二叉搜索樹中的搜索 題目鏈接 二叉搜索樹中的搜索 題解 解題思路 解題思路 LeetCode.98 驗證二叉搜索樹 題目鏈接 驗…

pycharm無法識別pip安裝的包

在使用conda創建一個新的環境后,有些包通過pip的方式安裝更方便有效,若在pip安裝后,遇到該環境沒有此包,或pycharm監測不到此包,通常是pip的環境指向有問題。 解決措施: # 首先檢查當前pip的指向 which pip…

Elasticsearch 的 `modules` 目錄

Elasticsearch 的 modules 目錄是存放**核心功能模塊**的目錄,這些模塊是 Elasticsearch 運行所必需的基礎組件,**隨官方發行版一起提供**,但設計上允許通過移除或替換模塊來**定制化部署**(比如構建一個最小化的 Elasticsearch 實…

https——TCP+TLS

https——TCPTLS主題:基于mbedtls-2.16.0,驗證TLS會話復用功能驗證環境:1.TLS服務端2.TLS客戶端2.1 基于Sesssion ID2.1.1mbedtls-2.16.0庫的宏配置2.1.2 初始化配置2.1.3 TCP連接2.1.4 首次TLS連接2.1.4.1 發送加密算法列表2.1.4.2 選擇加密…

uni-app uni-push 2.0推送圖標不展示問題

問題現象:我在uni-app的配置文件,配置了推送的大圖標小圖標發現在真機測試無法展示配置的推送圖標問題 官網文檔:開通 | uni-app官網 解決方法: 在uni-app官網中說的并不是很清楚只給了一個簡單的示例,配置并沒有告訴我…

scp:上傳大型數據集到實驗室服務器

我通過百度網盤下載了大概200GB的LUNA-2016的肺結節CT數據。實驗是在實驗室服務器上進行的,我現在需要將本地的數據集傳輸到實驗室的服務器上。我已經通過remote-ssh連接上了實驗室的服務器,但是如果通過這個插件上傳數據的話,一方面不支持上…