生活随笔
收集整理的這篇文章主要介紹了
爬虫入门知识+简单案例《python网络爬虫从入门到实践》静态网页抓取
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
爬蟲入門知識+簡單案例《python網絡爬蟲從入門到實踐》靜態網頁抓取
文章目錄
- 爬蟲入門知識+簡單案例《python網絡爬蟲從入門到實踐》靜態網頁抓取
- **安裝Requests**
- **獲取響應內容**
- **定制Requests**
- **傳遞URL參數params:**
- **定制請求頭headers**:
- **發送post請求**
- **設置超時timeout**
- **案例2:建議網頁采集器**
- **案例3:破解百度翻譯**
- **案例4:豆瓣電影排行榜前250進行解析**
安裝Requests
打開windows的cmd或者mac的終端,輸入:
pip install requests
獲取響應內容
requests.get( )方法獲取響應內容
import requestsr
=requests
.get
('https://www.baidu.com/?tn=02003390_3_hao_pg')r
.encoding
Out
[3]: 'ISO-8859-1'r
.status_code
Out
[4]: 200
響應對象(以r為例)的一些具體信息
響應對象信息描述
| r.text | 服務器響應的內容,會自動根據響應頭部的字符編碼進行解碼 |
| r.encoding | 服務器內容使用的文本編碼 |
| r.status_code | 用于檢測響應的狀態碼,返回200:請求成功了;返回4XX:表示客戶端錯誤;返回5XX:表示服務器錯誤響應 |
| r.content | 是字節方式的響應體,會自動解碼gzip和deflate編碼響應的數據 |
| r.json | 是Requests中內置的JSON解碼 |
案例1:第一個爬蟲
爬取搜狗頁面并保存
import requestsif __name__ == "__main__":# step1:指定urlurl = 'https://www.sogou.com/'# step2:發起請求# get方法會返回一個響應對象response = requests.get(url=url)# step3:獲取響應數據.text返回的是字符串形式的響應數據page_text = response.textprint(page_text)# step4:持久化存儲with open('./sogou.html', 'w', encoding='utf-8') as fp:fp.write(page_text)print("爬取數據結束!")
定制Requests
有些網頁,需要對Requests的參數進行設置才能獲取需要的數據,包括傳遞URL參數、定制請求頭、發送POST請求、設置超時等
傳遞URL參數params:
URL參數可以用來請求特定的數據,比如說在百度中搜索某個特定值得到的網頁。
- 如果是自己直接構建的URL,數據一般會跟在一個問號后面,以鍵值對的形式放。如:“https://www.baidu.com/s?wd=%E9%A9%AC%E4%BA%91”?!畐d’就是參數名,后面的‘%E9%A9%AC%E4%BA%91’就是參數值。(每次都直接構建的話,就很麻煩了)
- 在Requests中,可以直接把這些參數保存在字典中,用params(參數)傳遞到url中。
key_dict
={'key1':'value1','key2':'value2'}
r
=requests
.get
('http://httpbin.org/get',params
=key_dict
)
[結合案例2:爬取搜狗指定詞條對應的搜索結果頁面,更容易理解]
定制請求頭headers:
-User-Agent:請求載體的身份標識
-Connection:請求完畢后,是斷開連接還是保持連接。
- UA偽裝:是一種反反爬蟲機制。門戶網站的服務器會檢測對應請求的載體身份標識,如果檢測到請求的載體的身份標識是某一瀏覽器說明該請求是一個正常請求。如果不是,則表示該請求是一個不正常的請求。則請求可能會被拒絕。所以我們的爬蟲程序需要進行UA偽裝(絕大部分的爬蟲程序都需要進行UA偽裝)
在requests中,我們可以利用參數Headers偽裝成瀏覽器身份,具體參考案例2
發送post請求
post請求就是:requests.post()。實現post請求,要傳遞一個字典給requests中的data參數,這個數據字典就會咋發出請求時自動編碼為表單形式。【參考案例3】
設置超時timeout
timeout參數:在特定的描述結束之后停止等待響應。
即:如果服務器在timeout秒之內沒有應答,則返回異常。
案例2:建議網頁采集器
需求:爬取搜狗指定詞條對應的搜索結果頁面
import requests
headers
={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
url
='https://www.baidu.com/s?'
kw
=input("enter a word:")
param
={'wd':kw
}
response
=requests
.get
(url
=url
,params
=param
,headers
=headers
)
page_text
=response
.text
print(page_text
)
fileName
=kw
+'.html'
with open(fileName
,'w',encoding
='utf-8') as fp
:fp
.write
(page_text
)
print(fileName
,'保存成功!')
案例3:破解百度翻譯
需求:輸入單詞能夠爬取百度翻譯中對應的翻譯內容
- 2、選擇【XHR】類型的數據包,查看哪個數據包是用來得到翻譯效果的
#-post請求(攜帶了參數)
#-響應數據是一組json數據
import requests
import json
#1.指定url
post_url='https://fanyi.baidu.com/sug'#2.進行UA偽裝
headers={'headers':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
#3.post請求參數處理,同get一樣
word=input('enter a word:')
data={'kw':word}#4.請求發送
response=requests.post(url=post_url,data=data,headers=headers)#是json數據
#5.獲取相應數據:json()方法返回的是obj,(只有確定相應數據的類型,才可以使用json)
dic_obj=response.json()
print(dic_obj)#6.進行持久化存儲
filename=word+'.json'
fp=open(filename,'w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)#中文不能使用ascii碼編碼
print('over!')
案例4:豆瓣電影排行榜前250進行解析
案例來源于《python網絡爬蟲從入門到實戰》。
需求:對豆瓣電影排行榜前250名的頁面進行抓取;獲取這些電影的名字。
分析網頁:250名電影一共有10頁,每頁有25條數據。第一頁的網址為”https://movie.douban.com/top250?start=0”;第二頁的網址為:“https://movie.douban.com/top250?start=25”(也可以是https://movie.douban.com/top250?start=25&filter=,后面這個“&filter沒影響”)
可以發現:這些網頁的網址,前面都是相同的,控制第幾頁的參數就是問號后面的“start”。
設置url:可以利用循環,構建完整的url字符串;也可以用參數params
設置headers,進行爬取,獲取服務器數據。
利用bs4中的BeautifulSoup解析,獲取電影名字
import requests
from bs4
import BeautifulSoup
def get_moives():headers
={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}moive_list
=[]for i
in range(0,10):link
='https://movie.douban.com/top250?start='+str(i
*25)r
=requests
.get
(link
,headers
=headers
,timeout
=10)print(str(i
+1),"頁面響應狀態:",r
.status_code
)soup
=BeautifulSoup
(r
.text
,'lxml')div_list
=soup
.find_all
('div',class_
='hd')for each
in div_list
:moive
=each
.a
.span
.text
.strip
()moive_list
.append
(moive
)return moive_list
print(get_moives
())
'''
1 頁面響應狀態: 200
2 頁面響應狀態: 200
3 頁面響應狀態: 200
4 頁面響應狀態: 200
5 頁面響應狀態: 200
6 頁面響應狀態: 200
7 頁面響應狀態: 200
8 頁面響應狀態: 200
9 頁面響應狀態: 200
10 頁面響應狀態: 200
['肖申克的救贖', '霸王別姬', '阿甘正傳', '泰坦尼克號', '這個殺手不太冷', '美麗人生', '千與千尋', '辛德勒的名單', '盜夢空間', '忠犬八公的故事', '星際穿越', '楚門的世界', '海上鋼琴師', '三傻大鬧寶萊塢', '機器人總動員', '放牛班的春天', '無間道', '瘋狂動物城', '大話西游之大圣娶親', '熔爐', '控方證人', '教父', '當幸福來敲門', '觸不可及', '怦然心動', '龍貓', '末代皇帝', '尋夢環游記', '蝙蝠俠:黑暗騎士', '活著', '哈利·波特與魔法石', '指環王3:王者無敵', '亂世佳人', '素媛', '飛屋環游記', '摔跤吧!爸爸', '我不是藥神', '何以為家', '十二怒漢', '哈爾的移動城堡', '少年派的奇幻漂流', '鬼子來了', '大話西游之月光寶盒', '貓鼠游戲', '天空之城', '聞香識女人', '天堂電影院', '指環王2:雙塔奇兵', '鋼琴家', '讓子彈飛', '羅馬假日', '海蒂和爺爺', '指環王1:護戒使者', '黑客帝國', '大鬧天宮', '教父2', '死亡詩社', '辯護人', '獅子王', '綠皮書', '搏擊俱樂部', '飲食男女', '美麗心靈', '本杰明·巴頓奇事', '竊聽風暴', '情書', '穿條紋睡衣的男孩', '兩桿大煙槍', '西西里的美麗傳說', '看不見的客人', '拯救大兵瑞恩', '音樂之聲', '飛越瘋人院', '小鞋子', '阿凡達', '哈利·波特與死亡圣器(下)', '沉默的羔羊', '海豚灣', '致命魔術', '禁閉島', '布達佩斯大飯店', '蝴蝶效應', '美國往事', '心靈捕手', '低俗小說', '春光乍泄', '摩登時代', '七宗罪', '喜劇之王', '致命ID', '殺人回憶', '功夫', '超脫', '哈利·波特與阿茲卡班的囚徒', '加勒比海盜', '被嫌棄的松子的一生', '紅辣椒', '狩獵', '請以你的名字呼喚我', '7號房的禮物', '剪刀手愛德華', '勇敢的心', '斷背山', '唐伯虎點秋香', '入殮師', '第六感', '天使愛美麗', '哈利·波特與密室', '愛在黎明破曉前', '重慶森林', '一一', '幽靈公主', '蝙蝠俠:黑暗騎士崛起', '小森林 夏秋篇', '陽光燦爛的日子', '菊次郎的夏天', '超能陸戰隊', '完美的世界', '無人知曉', '愛在日落黃昏時', '消失的愛人', '小森林 冬春篇', '借東西的小人阿莉埃蒂', '倩女幽魂', '甜蜜蜜', '側耳傾聽', '幸福終點站', '時空戀旅人', '馴龍高手', '螢火之森', '瑪麗和馬克思', '怪獸電力公司', '教父3', '一個叫歐維的男人決定去死', '大魚', '玩具總動員3', '告白', '傲慢與偏見', '神偷奶爸', '寄生蟲', '釜山行', '陽光姐妹淘', '射雕英雄傳之東成西就', '被解救的姜戈', '未麻的部屋', '恐怖直播', '哪吒鬧海', '我是山姆', '哈利·波特與火焰杯', '血戰鋼鋸嶺', '頭號玩家', '新世界', '模仿游戲', '七武士', '喜宴', '黑客帝國3:矩陣革命', '花樣年華', '頭腦特工隊', '電鋸驚魂', '三塊廣告牌', '盧旺達飯店', '你的名字。', '達拉斯買家俱樂部', '瘋狂原始人', '上帝之城', '諜影重重3', '英雄本色', '風之谷', '心迷宮', '驚魂記', '九品芝麻官', '縱橫四海', '海街日記', '歲月神偷', '記憶碎片', '忠犬八公物語', '荒蠻故事', '愛在午夜降臨前', '綠里奇跡', '爆裂鼓手', '小偷家族', '貧民窟的百萬富翁', '色,戒', '真愛至上', '東邪西毒', '無敵破壞王', '瘋狂的石頭', '冰川時代', '雨中曲', '黑天鵝', '你看起來好像很好吃', '恐怖游輪', '2001太空漫游', '雨人', '茶館', '戀戀筆記本', '魔女宅急便', '遺愿清單', '城市之光', '螢火蟲之墓', '可可西里', '大佛普拉斯', '無間道2', '牯嶺街少年殺人事件', '虎口脫險', '源代碼', '人工智能', '初戀這件小事', '海邊的曼徹斯特', '背靠背,臉對臉', '東京教父', '小丑', '羅生門', '終結者2:審判日', '青蛇', '奇跡男孩', '二十二', '波西米亞狂想曲', '房間', '瘋狂的麥克斯4:狂暴之路', '新龍門客棧', '無恥混蛋', '魂斷藍橋', '血鉆', '千鈞一發', '步履不停', '黑客帝國2:重裝上陣', '彗星來的那一夜', '戰爭之王', '崖上的波妞', '心靈奇旅', '愛樂之城', '諜影重重2', '燃情歲月', '阿飛正傳', '海洋', '諜影重重', '再次出發之紐約遇見你', '穿越時空的少女', '火星救援', '末路狂花', '朗讀者', '香水', '地球上的星星', '我愛你', '完美陌生人', '千年女優', '驢得水', '聚焦', '浪潮']
'''
總結
以上是生活随笔為你收集整理的爬虫入门知识+简单案例《python网络爬虫从入门到实践》静态网页抓取的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。