python爬蟲

1.認(rèn)識(shí)爬蟲

我們所熟悉的一系列搜索引擎都是大型的網(wǎng)絡(luò)爬蟲,比如百度引矩、搜狗、360瀏覽器掏觉、谷歌搜索等澳腹。每個(gè)搜索引擎都擁有自己的爬蟲程序酱塔,比如360瀏覽器的爬蟲稱作360Spider延旧,搜狗的爬蟲叫做Sogouapider

2.爬蟲分類

爬蟲可分為三大類:通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲捌蚊、增量式網(wǎng)絡(luò)爬蟲
通用網(wǎng)絡(luò)爬蟲:是搜索引擎的重要組成部分缅糟,通用網(wǎng)絡(luò)爬蟲需要遵守robots協(xié)議窗宦,網(wǎng)站通過此協(xié)議告訴搜索引擎哪些頁面可以抓取赴涵,哪些頁面不可以抓取

聚焦網(wǎng)絡(luò)爬蟲:是面向特定需求的一種網(wǎng)絡(luò)爬蟲程序髓窜,它與通用爬蟲的區(qū)別在于欺殿,聚焦爬蟲在實(shí)施網(wǎng)頁抓取的時(shí)候會(huì)對網(wǎng)頁內(nèi)容進(jìn)行篩選和處理脖苏,盡量保證只抓取與需求相關(guān)的網(wǎng)頁信息棍潘,聚焦網(wǎng)絡(luò)爬蟲極大地節(jié)省了硬件和網(wǎng)絡(luò)資源,由于保存的頁面數(shù)量少所以更新速度很快至扰。

增量式網(wǎng)絡(luò)爬蟲:是指對已下載網(wǎng)頁采取增量式更新敢课,它是一種只爬取新產(chǎn)生的或者已經(jīng)發(fā)生變化網(wǎng)頁的爬蟲程序直秆,能夠在一定程度上保證爬取的頁面時(shí)最新的頁面

3.爬蟲應(yīng)用

1).數(shù)據(jù)分析
2).商業(yè)領(lǐng)域

4.為什么用python做爬蟲

不止python這一種語言可以做爬蟲圾结,諸如php筝野、java歇竟、c/c++都可以用來寫爬蟲程序焕议,但是相較于其他語言python做爬蟲是最簡單的
php:對多線程盅安、異步的支持語言不是很好java也經(jīng)常用來寫爬蟲程序别瞭,但java:java語言本身很笨重畜隶,代碼量大籽慢,因此入門的門檻較高箱亿;
c/c++:c/c++運(yùn)行效率雖然高届惋,但學(xué)習(xí)和開發(fā)成本也高脑豹,寫一個(gè)小型的爬蟲程序可能花費(fèi)很長的時(shí)間
而python語言瘩欺,其語法優(yōu)美俱饿,代碼簡潔拍埠,開發(fā)效率高枣购,支持·多個(gè)爬蟲模塊棉圈,比如urllib迄损、requests芹敌、Bs4等氏捞。python的請求模塊和解析模塊豐富成熟液茎,并且提供了強(qiáng)大的Scrapy框架捆等,讓寫爬蟲程序變得更為簡單

5.編寫python爬蟲的流程

  • 先由urllib模塊的request方法打開url得到網(wǎng)頁HTML對象
  • 使用瀏覽器打開網(wǎng)頁源代碼分析網(wǎng)頁結(jié)構(gòu)以及元素節(jié)點(diǎn)
  • 通過Beautiful Soup或者正則表達(dá)式提取數(shù)據(jù)
  • 存儲(chǔ)數(shù)據(jù)到本地磁盤或數(shù)據(jù)庫

6.簡單的python爬蟲程序

6-1.獲取網(wǎng)頁html信息
獲取響應(yīng)對象
向百度(http://www.baidu.com/)發(fā)起請求栋烤,獲取百度首頁的html信息明郭,代碼如下

import urllib.request
#或from urllib import request 
#response = request.urlopen('http://www.baidu.com/')
resonse=urllib.request.urlopen('http://www.baidu.com/')

6-2.輸出HTML信息

#提取響應(yīng)內(nèi)容
html=response.read().decode('utf-8')

urllib常用方法
1).urlopen(url,timeout)
url:表示要爬取的url地址
timeout:設(shè)置等待超時(shí)時(shí)間始绍,指定時(shí)間內(nèi)未得到響應(yīng)則拋出超時(shí)異常
2).urllib.request.Request(url,headers)
url:請求的URL地址
headers:重構(gòu)請求頭
html響應(yīng)對象方法

bytes=response.read()#read()返回結(jié)果為bytes數(shù)據(jù)類型
string=response.read().decode()#decode()將字節(jié)串轉(zhuǎn)換為string類型
url=response.geturl()#返回響應(yīng)對象的url地址
code=response.getcode()#返回請求時(shí)的HTTP響應(yīng)碼

編碼解碼操作
string.encode('utf-8')#字符串轉(zhuǎn)換為字節(jié)碼
bytes.decode('utf-8')#字節(jié)碼轉(zhuǎn)換為字符串

7.User-Agent(用戶代理)是什么

User-Agent即用戶代理亏推,簡稱UA径簿,它是一個(gè)特殊字符串頭篇亭。網(wǎng)站服務(wù)器通過識(shí)別UA來確定用戶所使用的操作系統(tǒng)版本译蒂、CPU類型柔昼、瀏覽器版本等信息。而網(wǎng)站服務(wù)器則通過判斷UA來給客戶端發(fā)送不同的頁面

網(wǎng)絡(luò)爬蟲使用程序代碼網(wǎng)站乙嘀,因此爬蟲程序也被稱為網(wǎng)絡(luò)機(jī)器人虎谢,絕大多數(shù)網(wǎng)站都具備一定的反爬能力婴噩,禁止爬蟲大量的訪問網(wǎng)站几莽,以免給網(wǎng)站服務(wù)器帶來壓力银觅,User-Agent就是反爬策略的第一步

網(wǎng)站通過識(shí)別請求頭中User-Agent信息來判斷是否是爬蟲訪問網(wǎng)站究驴。如果是洒忧,網(wǎng)站首先對該IP進(jìn)行預(yù)警熙侍,對其進(jìn)行重點(diǎn)監(jiān)控蛉抓,當(dāng)發(fā)現(xiàn)該IP超過規(guī)定時(shí)間內(nèi)的訪問次數(shù)驶忌,將在一段時(shí)間內(nèi)禁止再次訪問網(wǎng)站
常見的 User-Agent 請求頭付魔,如下所示:

系統(tǒng) 瀏覽器 User-Agent字符串
Mac Chrome Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36
Mac Firefox Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0
Mac Safari Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Windows Edge Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763
Windows IE Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Windows Chrome Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
iOS Chrome Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/31.0.1650.18 Mobile/11B554a Safari/8536.25
iOS Safari Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4
Android Chrome Mozilla/5.0 (Linux; Android 4.2.1; M040 Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36
Android Webkit Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; M351 Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

注:httpbin.org這個(gè)網(wǎng)站能測試HTTP請求和響應(yīng)的各種信息陈哑,比如cookie惊窖、IP爬坑、headers和登錄驗(yàn)證等盾计,且支持GET/POST等多種方法

重構(gòu)爬蟲信息
下面使用urllib.request.Request()方法重構(gòu)User-Agent信息署辉,代碼如下:

import urllib.request
url = 'http://httpbin.org/get' #向測試網(wǎng)站發(fā)送請求
#重構(gòu)請求頭哭尝,偽裝成 Mac火狐瀏覽器訪問材鹦,可以使用上表中任意瀏覽器的UA信息
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0'}
# 1栅葡、創(chuàng)建請求對象欣簇,包裝ua信息
req = urllib.request.Request(url=url,headers=headers)
# 2熊咽、發(fā)送請求横殴,獲取響應(yīng)對象
res = urllib.request.urlopen(req)
# 3滥玷、提取響應(yīng)內(nèi)容
html = res.read().decode('utf-8')
print(html)

重構(gòu)UA
也可以通過其他模塊實(shí)現(xiàn),比如requests模塊

8.自定義UA代理池

在編寫爬蟲程序的時(shí)候如贷,一般會(huì)構(gòu)建一個(gè)UA(用戶代理)池杠袱,就是把多個(gè)瀏覽器的UA信息放進(jìn)列表中楣富,再從中隨機(jī)選擇纹蝴,構(gòu)建用戶代理池塘安,能夠避免總是使用一個(gè)UA來訪問王者兼犯,因?yàn)槎虝r(shí)間總是用一個(gè)UA高頻率訪問的網(wǎng)站砸脊,可能會(huì)引起網(wǎng)站的警覺脓规,從而封殺掉IP
構(gòu)建代理池的方法也非常簡單侨舆,在您的pycharm工作目錄中定義一個(gè)ua_info.py文件,將UA信息以列表的形式粘貼到該文件中臭笆,也可以使用專門的第三方模塊來隨機(jī)獲取UA信息愁铺,不過需要安裝
pip install fake-useragent

from fake_useragent import UserAgent
#實(shí)例化一個(gè)對象
ua=UserAgent()

9.URL編碼/解碼詳解

當(dāng)URL或者查詢參數(shù)中茵乱,帶有中文或者特殊字符的時(shí)候,就需要對URL進(jìn)行編碼(采用十六進(jìn)制編碼格式)斤贰,URL的編碼原則是使用安全字符去表示那些不安全字符

注:安全字符荧恍,指的是沒有特殊用途或者特殊意義的字符

URL中規(guī)定了一些具有特殊意義的字符送巡,常用來分隔兩個(gè)不同的URL組件辨嗽,這些字符被稱為保留字符,例如:

  • 冒號(hào):用于分隔協(xié)議和主機(jī)組件谷朝,斜杠用于分隔主機(jī)和路徑
  • ?:用于分隔路徑和查詢參數(shù)等
  • =:用于查詢參數(shù)中的鍵值對
  • &:用于分隔查詢的多個(gè)鍵值對
    其余常用的保留字符有:/ . ... # @ $ + ; %

10.哪些字符需要編碼

URL之所以需要編碼专钉,是因?yàn)閁RL中的某些字符會(huì)引起歧義跃须,比如URL查詢參數(shù)中包含了&或者%就會(huì)造成服務(wù)器解析錯(cuò)誤菇民;再比如,URL的編碼格式采用的是ASCII碼而非Unicode格式娇掏,這表明URL中不允許包任何非ASCII字符(比如中文)驹碍,否則就會(huì)造成URL解析錯(cuò)誤

URL編碼協(xié)議規(guī)定(RFC3986協(xié)議):URL中只允許使用ASCII字符集可以顯示的字符,比如英文字母嚼酝、數(shù)字浮还、和- _ . ~ ! *這6個(gè)特殊字符,當(dāng)在URL中使用不屬于ASCII字符集的字符時(shí)闽巩,就要使用特殊的符號(hào)對該字符進(jìn)行編碼钧舌,比如空格需要%20來表示
除了無法顯示的字符需要編碼外,還需要對URL中的部分保留字符和不安全字符進(jìn)行編碼涎跨,下面列舉了部分不安全字符:
[ ] < > " " { } | \ ^ * · ‘ ’ 等
下表對URL中部分保留字符和不安全字符進(jìn)行了說明:

字符 含義 十六進(jìn)制值編碼
+ URL中+號(hào)表示空格 %2B
空格 URL中空格可以編碼為+號(hào)或者%20 %20
/ 分隔目錄和子目錄 %2F
? 分隔實(shí)際的URL和參數(shù) %3F
% 指定特殊字符 %25
# 表示書簽 %23
& URL中指定的參數(shù)間的分隔符 %26
= URL中指定參數(shù)的值 %3D

11.python實(shí)現(xiàn)編碼與解碼

python的標(biāo)準(zhǔn)庫urllib.parse模塊中提供了用來編碼和解碼的方法,分別是urlcode()與unquote()方法

urlencode():該方法實(shí)現(xiàn)了對url地址的編碼操作
unquote():該方法將編碼后的url地址進(jìn)行還原隅很,也就是解碼

12.爬蟲程序結(jié)構(gòu)

用面向?qū)ο蟮姆椒ň帉懪老x程序時(shí)撞牢,邏輯結(jié)構(gòu)較為固定

#程序結(jié)構(gòu)
class xxxSpider(object):
  def __init__(self):
  #定義常用的變量,比如url或計(jì)數(shù)變量等
  def get_html(self):
  #獲取響應(yīng)內(nèi)容的函數(shù),使用隨機(jī)的User-Agent
  def parse_html(self):
  #使用正則表達(dá)式來解析頁面屋彪,提取數(shù)據(jù)
  def write_html(self):
  #將提取的數(shù)據(jù)按要求進(jìn)行保存所宰,csv,MYSQL數(shù)據(jù)庫等
  def run(self):
   #主函數(shù)畜挥,用來控制整體邏輯
if __name__=='__main__':
    #程序開始運(yùn)行時(shí)間
    spider=xxxSpider()
    spider.run()

13.正則表達(dá)式基本語法

正則表達(dá)式是一種字符串匹配模式或者規(guī)則仔粥,它可以用來檢索、替換那些符合規(guī)定的文本躯泰,正則表達(dá)式幾乎適用于所有的編程語言,無論是前端語言javascript還是諸如許多后端語言华糖,比如python斟冕、java、c#等缅阳,這些都提供了相應(yīng)的函數(shù)磕蛇、模塊來支持正則表達(dá)式,比如python的re模塊
在使用python'編寫爬蟲的過程中十办,re模塊通常作為一種解析方法來使用秀撇,通過審查網(wǎng)頁元素來獲取網(wǎng)頁的大體結(jié)構(gòu),然后使用解析模塊來提取你想要的網(wǎng)頁信息向族,最終實(shí)現(xiàn)數(shù)據(jù)的抓取

正則表達(dá)式元字符

元字符 匹配內(nèi)容
. 匹配除換行符以外的任意字符
\w 匹配所有普通字符(數(shù)字呵燕、字母或下劃線)
\s 匹配任意的空白符
\d 匹配所有數(shù)字
\n 匹配一個(gè)換行符
\t 匹配一個(gè)制表符
\b 匹配一個(gè)單詞的結(jié)尾
^ 匹配字符串的開始位置
$ 匹配字符串的結(jié)尾位置
\W 匹配非字母或數(shù)字或下劃線
\D 匹配非數(shù)字
\S 匹配非空白符
a|b 匹配字符a或字符b
() 正則表達(dá)式分組所用符號(hào),匹配括號(hào)內(nèi)的表達(dá)式件相,表示一個(gè)組
[...] 匹配字符組中的字符
[^...] 匹配除了字符組中的所有字符

量詞

量詞 匹配內(nèi)容
* 重復(fù)零次或更多次
+ 重復(fù)一次或者更多次
? 重復(fù)0次或者一次
{n} 重復(fù)n次
{n再扭,} 重復(fù)n次或者更多次
{n,m} 重復(fù)n到m次

字符組

正則 待匹配字符 匹配結(jié)果 說明
[0123456789] 8 True 在一個(gè)字符組里枚舉所有字符夜矗,字符組里的任意一個(gè)字符和"待匹配字符"相同都視為可以匹配泛范。
[0123456789] a False 由于字符組中沒有a字符,所以不能匹配
[0-9] 7 True 也可以用-表示范圍紊撕,[0-9] 就和 [0123456789] 是一個(gè)意思罢荡。
[a-z] s True 匹配所有的小寫字母,直接用 [a-z] 就可以表示
[A-Z] B True [A-Z] 就表示所有的大寫字母
[0-9a-fA-F] e True 可以匹配數(shù)字对扶,大小寫形式的 a~f区赵,用來驗(yàn)證十六進(jìn)制字符

貪婪模式
正則模式默認(rèn)為貪婪匹配,也就是盡可能多的向后匹配字符浪南,比如{n,m}表示前面的內(nèi)容出現(xiàn)n到m次(n小于m)笼才,在貪婪模式下,首先以匹配m次為目標(biāo)络凿,而在非貪婪模式是盡可能少的向后匹配內(nèi)容骡送,也就是說匹配n次即可拜效,貪婪模式轉(zhuǎn)換為非貪婪模式在元字符后添加?即可實(shí)現(xiàn)

14.re模塊用法詳解

re模塊常用方法
re.compile()該方法用來生成正則表達(dá)式對象各谚,其語法格式如下:
regex=re.compile(pattern,flags=0)
參數(shù)說明:
pattern:正則表達(dá)式對象
flags:代表功能標(biāo)志位到千,擴(kuò)展正則表達(dá)式的匹配

re.findall()根據(jù)正則表達(dá)式匹配字符串內(nèi)容
re.findall(pattern昌渤,string,flags=0)
該函數(shù)的返回值是匹配到的內(nèi)容列表憔四,如果正則表達(dá)式有子組膀息,則只能獲取到子組對應(yīng)的內(nèi)容,參數(shù)說明如下:
pattern:正則表達(dá)式對象
string:目標(biāo)字符串
flags:代表功能標(biāo)志位了赵,擴(kuò)展正則表達(dá)式的匹配

regex.findall()該函數(shù)根據(jù)正則表達(dá)式對象匹配目標(biāo)字符串內(nèi)容潜支,其語法格式如下:
regex.findall(string,pos,endpos)
參數(shù)說明:
string 目標(biāo)字符串。
pos 截取目標(biāo)字符串的開始匹配位置柿汛。
endpos 截取目標(biāo)字符串的結(jié)束匹配位置冗酿。

re.split(pattern,string,flag=0)該函數(shù)使用正則表達(dá)式匹配內(nèi)容,切割目標(biāo)字符串络断。返回值是切割后的內(nèi)容列表
re.split(pattern,string,flags = 0)
參數(shù)說明:
pattern:正則表達(dá)式裁替。
string:目標(biāo)字符串。
flags:功能標(biāo)志位,擴(kuò)展正則表達(dá)式的匹配貌笨。

re.sub()該參數(shù)使用一個(gè)字符串替換正則表達(dá)式匹配到的內(nèi)容弱判,返回值是替換后的字符串。其語法格式如下:
re.sub(payyern锥惋,replace昌腰,string,max膀跌,flags=0)
其參數(shù)說明:
pattern:正則表達(dá)式
replace:替換的字符串
string:目標(biāo)字符串
max:最多替換幾處遭商,默認(rèn)替換全部
flags:功能標(biāo)志位,擴(kuò)展正則表達(dá)式的匹配

re.search匹配目標(biāo)字符串第一個(gè)符合的內(nèi)容,返回值為匹配的對象,語法格式如下:
re.search(pattern,string,flags=0)

flags功能標(biāo)志位
功能標(biāo)志位的作用是擴(kuò)展正則表達(dá)的匹配功能捅伤,常用的flag如下所示:

縮寫元字符 說明
A 元字符只能匹配ASCII碼
I 匹配忽略字母大小寫
S 使得.元字符可以匹配換行符
M 使^$可以匹配每一行的開頭和結(jié)尾位置

15.csv模塊(讀寫文件)

csv文件又稱為逗號(hào)分隔值文件株婴,是一種通用的、相對簡單的文件格式暑认,用以存儲(chǔ)表格數(shù)據(jù)困介,包括數(shù)字或者字符。csv是電子表格和數(shù)據(jù)庫中最常見的輸入蘸际、輸出文件格式座哩。
通過爬蟲將數(shù)據(jù)抓取下來,然后吧數(shù)據(jù)保存在文件粮彤,或者數(shù)據(jù)庫中根穷,這個(gè)過程稱為數(shù)據(jù)的持久化存儲(chǔ)姜骡。
csv文件寫入
csv.writer()csv模塊中的writer類可用于讀寫序列化的數(shù)據(jù),其語法格式如下:
writer(csvfile屿良,dialect=‘excel’圈澈,**fmtparams)
參數(shù)說明:
csvfile:必須是支持迭代(iterator)的對象,可以是文件(file)對象或者列表(list)對象
dialect:編碼風(fēng)格尘惧,默認(rèn)為excel康栈,也就是使用逗號(hào)分隔
fmtparam:格式化參數(shù)。用來覆蓋之前dialect對象指定的編碼風(fēng)格

1671277710108.png

16.csv文件讀取

csv.reader()csv模塊中的reader類和DictReader類用于讀取文件中的數(shù)據(jù)喷橙,其中reader()語法格式如下:
csv.reader(csvfile, dialect='excel', **fmtparams)

17.Pymysql實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)

連接數(shù)據(jù)庫

db=pymysql.connect('localhost','root','123456',maoyandb)

參數(shù)說明:
localhost:本地 MySQL 服務(wù)端地址啥么,也可以是遠(yuǎn)程數(shù)據(jù)庫的 IP 地址。
root:連接數(shù)據(jù)所使用的用戶名贰逾。
password:連接數(shù)據(jù)庫使用的密碼悬荣,本機(jī) MySQL 服務(wù)端密碼“123456”。
db:連接的數(shù)據(jù)庫名稱疙剑。
創(chuàng)建cursor對象
cursor=db.cursor()
執(zhí)行sql命令
execute()方法用來執(zhí)行SQL語句
例:

sql='insert into filmtab values('%s','%s','%s')' % ('刺殺氯迂,小說家','雷佳音'言缤,'2021')
cursor.execute(sql)
sql='insert into filmtab values('%s','%s','%s')'
cursor.execute(sql,['刺殺囚戚,小說家','雷佳音'轧简,'2021'])

提交數(shù)據(jù)
db.commit()
關(guān)閉數(shù)據(jù)庫
cursor.close()
db.close()
插入多條
使用executemany()可以同時(shí)插入多條數(shù)據(jù)

18.爬蟲增量抓取

爬蟲是一種效率很低的程序驰坊,非常消耗計(jì)算機(jī)資源,對于聚焦爬蟲程序而言哮独,需要每天對特定的網(wǎng)站進(jìn)行數(shù)據(jù)抓取拳芙,如果每次都去抓取之前意境抓取過的數(shù)據(jù),就會(huì)白白消耗了時(shí)間和資源皮璧,而增量爬蟲是指通過監(jiān)測網(wǎng)站更新的
那么要如何判斷爬蟲程序是否已經(jīng)抓取過二級頁面的url呢舟扎,其實(shí),當(dāng)你第一次運(yùn)行爬蟲程序時(shí)悴务,爬蟲會(huì)將所有的url抓取下來睹限,然后將這些url放入數(shù)據(jù)庫中,為了提高數(shù)據(jù)庫的查詢效率讯檐,您可以為每一個(gè)url生成專屬的標(biāo)識(shí)羡疗,當(dāng)網(wǎng)站更新后,程序只會(huì)對數(shù)據(jù)庫中不存在的標(biāo)識(shí)進(jìn)行抓取
代碼實(shí)現(xiàn):

建庫建表

create datebase movieskydb charset utf8;
use movieskydb;
create table request_finger(
  finger char(60)
)charext=utf8;
create table movieinfo(
  moviename varchar(300),
  downloadaddr varchar(600)
)charset=utf8;

url標(biāo)識(shí)生成
可以使用python內(nèi)置模塊md5來生成加密標(biāo)識(shí)

#導(dǎo)入模塊
from hashlib import md5
#待加密的url
url="https://www.dytt8.net/html/gndy/dyzz/20210226/61131.html"
# 生成MD5對象
secret = md5()
# 加密url
secret.update(url.encode())
# 提取十六進(jìn)制的加密串
finger = secret.hexdigest()

19.python requests庫安裝與使用

requests庫的宗旨是讓http服務(wù)于人類
requests.get()
該方法用于 GET 請求别洪,表示向網(wǎng)站發(fā)起請求叨恨,獲取頁面響應(yīng)對象。語法如下:
res = requests.get(url,headers=headers,params,timeout)
參數(shù)說明如下:
url:要抓取的 url 地址挖垛。
headers:用于包裝請求頭信息痒钝。
params:請求時(shí)攜帶的查詢字符串參數(shù)秉颗。
timeout:超時(shí)時(shí)間,超過時(shí)間會(huì)拋出異常送矩。
例:

import requests
url = 'http://baidu.com'
response = requests.get(url)
print(response)

requests.post()
該方法用于 POST 請求蚕甥,先由用戶向目標(biāo) url 提交數(shù)據(jù),然后服務(wù)器返回一個(gè) HttpResponse 響應(yīng)對象栋荸,語法如下:
response=requests.post(url,data={請求體的字典})
requests庫常用方法及參數(shù)介紹

requests.request()構(gòu)造一個(gè)請求對象菇怀,該方法是實(shí)現(xiàn)以下各個(gè)方法的基礎(chǔ)
requests.get()獲取html網(wǎng)頁的主要方法
requests.head()獲取html網(wǎng)頁頭信息的方法
requests.post()獲取html網(wǎng)頁post請求方法
requests.put()獲取html網(wǎng)頁put請求方法
requests.patch()獲取html網(wǎng)頁提交局部修改請求
requests.delete()獲取html頁面提交刪除請求

20.SSL認(rèn)證-verifyu參數(shù)

SSL證書是數(shù)字證書的一種,SSL證書遵守SSL協(xié)議蒸其,由信任的數(shù)字證書頒發(fā)機(jī)構(gòu) CA(電子認(rèn)證服務(wù))頒發(fā)。 SSL 具有服務(wù)器身份驗(yàn)證和數(shù)據(jù)傳輸加密功能库快。
verify參數(shù)的作用是檢查SSL認(rèn)證摸袁,默認(rèn)是True,設(shè)置為False則不檢查SSL證書

21.proxies參數(shù)-代理IP

代理ip池
通過構(gòu)建代理ip池可以讓你編寫的爬蟲程序更加穩(wěn)定
requests提供了一個(gè)代理ip參數(shù)proxies义屏,該參數(shù)的語法結(jié)構(gòu)如下
proxies={
'協(xié)議類型(http/https)':'協(xié)議類型://ip地址:端口號(hào)'
}

22.auth參數(shù)-用戶認(rèn)證

requests提供了一個(gè)auth參數(shù)靠汁,該參數(shù)的支持用戶認(rèn)證功能格式如下:
auth=('username','password')

23.Xpath表達(dá)式

Xpath即xml路徑語言,它是一門在xml文檔中查找信息的語言闽铐,Xpath使用路徑表達(dá)式來選取xml/html文檔中的節(jié)點(diǎn)或者節(jié)點(diǎn)集蝶怔,python的第三方解析庫lxml對Xpath路徑表達(dá)式提供了良好的支持,能夠解析xml與html文檔

24.Xpath基本語法

表達(dá)式 描述
node_name 選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)
/ 絕對路徑匹配兄墅,從根節(jié)點(diǎn)選取
// 相對路徑匹配踢星,從所有節(jié)點(diǎn)中查找當(dāng)前選擇的節(jié)點(diǎn),包括子節(jié)點(diǎn)和后代節(jié)點(diǎn)
. 選取當(dāng)前節(jié)點(diǎn)
.. 選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)
@ 選取屬性值隙咸,通過屬性值選取數(shù)據(jù)沐悦。常用元素屬性有@id、@name五督、@type藏否、@class、@title充包、@href

25.Xpath通配符

通配符 描述
* 匹配任意元素節(jié)點(diǎn)
@* 匹配任意屬性節(jié)點(diǎn)
node() 匹配任意類型的節(jié)點(diǎn)

26.Xpath內(nèi)建函數(shù)

函數(shù)名稱 xpath表達(dá)式示例 示例說明
text() ./text() 文本匹配副签,表示值當(dāng)前節(jié)點(diǎn)中的文本內(nèi)容
contains() //div[contains(@id,'stu')]() 模糊匹配,表示選擇id中包含stu的所有div節(jié)點(diǎn)
last() //*[@class='web'][last()] 位置匹配基矮,表示選擇@class=‘web’的最后一個(gè)節(jié)點(diǎn)
position() //*[@class='site'][position()<=2] 位置匹配淆储,表示選擇@class=‘site’的前兩個(gè)節(jié)點(diǎn)
start-with() .//input[start-with(@id,'st)] 匹配id以st開頭的元素
ends-with() .//input[endswith(@id,'st)] 匹配id以st結(jié)尾的元素

27.lxml

1673000121177.png

注:不要使用跟庫一樣的命名,會(huì)報(bào)錯(cuò)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末家浇,一起剝皮案震驚了整個(gè)濱河市遏考,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蓝谨,老刑警劉巖灌具,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件青团,死亡現(xiàn)場離奇詭異,居然都是意外死亡咖楣,警方通過查閱死者的電腦和手機(jī)督笆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诱贿,“玉大人娃肿,你說我怎么就攤上這事珠十×先牛” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵焙蹭,是天一觀的道長晒杈。 經(jīng)常有香客問我,道長孔厉,這世上最難降的妖魔是什么拯钻? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮撰豺,結(jié)果婚禮上粪般,老公的妹妹穿的比我還像新娘。我一直安慰自己污桦,他們只是感情好亩歹,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凡橱,像睡著了一般捆憎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梭纹,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天躲惰,我揣著相機(jī)與錄音,去河邊找鬼变抽。 笑死姻政,一個(gè)胖子當(dāng)著我的面吹牛碍庵,可吹牛的內(nèi)容都是我干的聘鳞。 我是一名探鬼主播两波,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼击儡!你這毒婦竟也來了塔沃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤阳谍,失蹤者是張志新(化名)和其女友劉穎蛀柴,沒想到半個(gè)月后螃概,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸽疾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年吊洼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片制肮。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冒窍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豺鼻,到底是詐尸還是另有隱情综液,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布儒飒,位于F島的核電站谬莹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏约素。R本人自食惡果不足惜届良,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一笆凌、第九天 我趴在偏房一處隱蔽的房頂上張望圣猎。 院中可真熱鬧,春花似錦乞而、人聲如沸送悔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欠啤。三九已至,卻和暖如春屋灌,著一層夾襖步出監(jiān)牢的瞬間洁段,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工共郭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祠丝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓除嘹,卻偏偏與公主長得像写半,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子尉咕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容