如何用python提取網(wǎng)頁上的內(nèi)容學(xué)習(xí)筆記

小白,况芒,完全不懂叶撒,初步學(xué)習(xí)筆記
教程:https://www.zhihu.com/question/413854335
爬蟲的方法耐版,其實(shí)就是用代碼來偽裝成瀏覽器压汪,去訪問對(duì)應(yīng)的url止剖,然后獲取到返回到的內(nèi)容穿香,這部分內(nèi)容可以是網(wǎng)頁源代碼,圖片焙蚓,mp3,視頻等洒宝,其實(shí)歸根結(jié)底就是獲取到url指向的在服務(wù)器里對(duì)應(yīng)的文件內(nèi)容,然后根據(jù)不同的文件類型來選擇不同編碼來解析待德。而在這基礎(chǔ)上将宪,則會(huì)有很多其他補(bǔ)充內(nèi)容和技巧橡庞,比如反爬蟲和規(guī)避反爬蟲,獲取驗(yàn)證碼丑勤,獲取JS實(shí)時(shí)生成的內(nèi)容吧趣,甚至模擬鍵鼠操作等强挫。
新手的話,可以先去看看小甲魚的urllib3爬蟲教程呆细,然后可以接著學(xué)request庫(kù)八匠,beautifulsoup4趴酣,spicy(沒記錯(cuò)的話好像是這個(gè)
另外驗(yàn)證碼可以自己用深度學(xué)習(xí)框架Keras構(gòu)建一個(gè)CNN網(wǎng)絡(luò)模型來識(shí)別驗(yàn)證碼岖寞。
教程:https://zhuanlan.zhihu.com/p/87321559

提取網(wǎng)頁源代碼——Requests 工具包

在我們提取網(wǎng)絡(luò)信息之前柜蜈,我們必須將網(wǎng)頁的源代碼進(jìn)行提取跨释,Requests工具包現(xiàn)在可以說是最好用和最普及的靜態(tài)網(wǎng)頁爬蟲工具
Requests工具包的使用非常簡(jiǎn)單,最主要使用的函數(shù)為requests.get(url),其中參數(shù)url就是我們想提取源代碼的網(wǎng)頁岁疼,再通過requests.get(url).text將頁面轉(zhuǎn)換為字符串缆娃,就可以供我們使用了。

信息提取——Xpath

我們普通的網(wǎng)頁一般都是XML文檔格式暖侨,當(dāng)我們想提取里面的內(nèi)容時(shí)崇渗,我們需要借助Xpath來分解其中的格式
提取我們想要的內(nèi)容宅广。在了解Xpath之前我們需要知道四個(gè)基本概念:節(jié)點(diǎn)、元素俭厚、屬性驶臊、文本 关翎。我們來看一個(gè)例子:

<?xml version="1.0" encoding="ISO-8859-1"?>
?
 
?
<bookstore>
?
 
?
<book>
?
  <title>Harry Potter</title>
?
  <author>J K. Rowling</author>
?
  <year>2005</year>
?
  <price>29.99</price>
?
</book>

?
</bookstore>

這就是一個(gè)網(wǎng)頁的源碼,其中 <bookstore> 是文檔節(jié)點(diǎn)
<author>J K. Rowling</author>是元素節(jié)點(diǎn)尖飞, lang="en" 是屬性節(jié)點(diǎn)。 J K. Rowling贞铣、200529.99是文本(文本通常就是我們想爬取的內(nèi)容)沮明。

實(shí)例分享——爬取豆瓣電影的信息

我們想爬取在豆瓣網(wǎng)上的電影《超時(shí)空同居》的導(dǎo)演和演員信息荐健。
1.找到電影的url


image.png

查看網(wǎng)頁源代碼的時(shí)候,找了好多方法都不可以纺酸,右鍵查看餐蔬,或者右鍵沒有的話按ctrl+U就可以了


image.png

image.png

2.分析TML的格式了佑附,例如我們要找到所有的主演:


image.png

image.png
<span class="actor"><span class='pl'>主演</span>:
 <span class='attrs'><a href="/celebrity/1312940/" rel="v:starring">
雷佳音</a> / <a href="/celebrity/1275756/" rel="v:starring">
佟麗婭</a> / <a href="/celebrity/1325751/" rel="v:starring">
張衣</a> / <a href="/celebrity/1313742/" rel="v:starring">
于和偉</a> / <a href="/celebrity/1394280/" rel="v:starring">
王正佳</a> / <a href="/celebrity/1015199/" rel="v:starring">
陶虹</a> / <a href="/celebrity/1274508/" rel="v:starring">
李念</a> / <a href="/celebrity/1275178/" rel="v:starring">
李光潔</a> / <a href="/celebrity/1321825/" rel="v:starring">
楊玏</a> / <a href="/celebrity/1274655/" rel="v:starring">
范明</a> / <a href="/celebrity/1274297/" rel="v:starring">
徐崢</a> / <a href="/celebrity/1317329/" rel="v:starring">
楊迪</a> / <a href="/celebrity/1350679/" rel="v:starring">
方齡</a> / <a href="/celebrity/1391980/" rel="v:starring">
陳昊</a></span></span><br/>

<span class="pl">類型:
</span> <span property="v:genre">
喜劇</span> / <span property="v:genre">
愛情</span> / <span property="v:genre">
奇幻</span><br/>

大家可以看到有一個(gè)普遍的規(guī)律:主演的名字所對(duì)應(yīng)的節(jié)點(diǎn)名都為a词爬,屬性都為rel="v:starring"权均,像下面的那個(gè)類型的屬性就不是rel="v:starring"螺句,這樣我們就可以很輕易的用xpath的語法定位到擁有這個(gè)元素的節(jié)點(diǎn)橡类,然后將所有的結(jié)果找出。

        <span ><span class='pl'>導(dǎo)演</span>: 
<span class='attrs'><a href="/celebrity/1331887/" 
rel="v:directedBy">蘇倫</a></span></span><br/>

同理取劫,導(dǎo)演的名字所對(duì)應(yīng)的節(jié)點(diǎn)名為a研侣,屬性都為rel=" v:directedBy"庶诡,我們同樣可以通過這個(gè)定位找到相應(yīng)的文本:
具體的代碼如下:

import requests
?
from lxml import etree

url='https://movie.douban.com/subject/27133303/?from=showing'  #輸入我們的url
?
get = requests.get(url).text # get(url) 得到我們的網(wǎng)頁, text將源網(wǎng)頁轉(zhuǎn)化為字符串

selector = etree.HTML(get) # 將源碼轉(zhuǎn)換為xpath可以識(shí)別的TML格式
?
info = {}  #字典用于儲(chǔ)存信息
?
info['電影'] = selector.xpath('//title/text()')[0].strip() # 定位電影名字
?
info['導(dǎo)演']=selector.xpath('//a[@rel="v:directedBy"]/text()') # 定位導(dǎo)演名字
?
info['演員']=selector.xpath('//a[@rel="v:starring"]/text()') # 定位演員名字
?
print(info)

image.png

報(bào)錯(cuò)了,說沒有xpath
改錯(cuò)书蚪,隨意搜了一個(gè)header迅栅,因?yàn)橛幸粋€(gè)網(wǎng)站【Python】 requests 爬取博客園內(nèi)容AttributeError: 'NoneType' object has no attribute 'xpath' - IT_小樹 - 博客園 (cnblogs.com)
說可以找到header,但是我工作的這臺(tái)電腦打開沒有那個(gè)界面也懶得去找了为流,
直接改成下面這樣
image.png

所以代碼變成這樣

url='https://movie.douban.com/subject/27133303/'  #輸入我們的url
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
get = requests.get(url,headers=header).text # get(url) 得到我們的網(wǎng)頁, text將源網(wǎng)頁轉(zhuǎn)化為字符串
selector = etree.HTML(get) # 將源碼轉(zhuǎn)換為xpath可以識(shí)別的TML格式

成功了敬察,


image.png

最后我們得到一個(gè)字典集的結(jié)果:

{'電影': '超時(shí)空同居 (豆瓣)', '導(dǎo)演': ['蘇倫'], '演員': ['雷佳音', '佟麗婭', 
'張衣', '于和偉', '王正佳', '陶虹', '李念', '李光潔', '楊玏', '范明', '徐崢', 
'楊迪', '方齡', '陳昊']}

教程里還有一個(gè)案例json也很好静汤,
https://zhuanlan.zhihu.com/p/87321559
進(jìn)入瀏覽器開發(fā)者模式按住F12即可

image.png

所以進(jìn)行案例二的聯(lián)系:
1.打開豆瓣的分類居凶,假設(shè)想爬取這些電影的信息
image.png

2.進(jìn)入開發(fā)者模式F12后刷新侠碧,打開其中的network
image.png

在點(diǎn)擊xhr
image.png

image.png

雙擊圖中給的網(wǎng)頁
image.png

可能是因?yàn)闆]json插件的原因
接下來的教程是:
image.png

但是我的報(bào)錯(cuò)
image.png

image.png

補(bǔ)充headers


image.png

這次是打開XHR單擊網(wǎng)址,點(diǎn)擊header 往下找headers然后有一個(gè)


image.png

復(fù)制下來就好
但是這樣我的解決失敗了
image.png

查看格式后發(fā)現(xiàn)不是json的格式“”:“”
找到錯(cuò)誤了


image.png

其實(shí)是因?yàn)槲抑疤畹倪@個(gè)url不對(duì),應(yīng)該是雙擊之后出現(xiàn)的網(wǎng)頁视卢,也就是這個(gè)的網(wǎng)頁
image.png

image.png

然后就成功啦据过、
最后總結(jié)一下所有的代碼
import requests
from lxml import etree
url='https://movie.douban.com/subject/27133303/'  #輸入我們的url
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
get = requests.get(url,headers=header).text # get(url) 得到我們的網(wǎng)頁, text將源網(wǎng)頁轉(zhuǎn)化為字符串
selector = etree.HTML(get) # 將源碼轉(zhuǎn)換為xpath可以識(shí)別的TML格式
info = {}  #字典用于儲(chǔ)存信息
info['電影'] = selector.xpath('//title/text()')[0].strip() # 定位電影名字
info['導(dǎo)演']=selector.xpath('//a[@rel="v:directedBy"]/text()') # 定位導(dǎo)演名字
info['演員']=selector.xpath('//a[@rel="v:starring"]/text()') # 定位演員名字
print(info)
#json
#
import json
import requests
url='https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0'
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52"}
get = requests.get(url=url,headers=header).json()   #用json()函數(shù)得到網(wǎng)頁源碼

#print(get)
#print('**********************************')
#print(get.text)
get = get['data']
info = {}
for i in range(len(get)):

    info[get[i]['title']] = [get[i]['directors'], get[i]['rate'] ]  #提取每部電影的導(dǎo)演和評(píng)分

print(info)

end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绳锅,一起剝皮案震驚了整個(gè)濱河市鳞芙,隨后出現(xiàn)的幾起案子期虾,更是在濱河造成了極大的恐慌驯嘱,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宾尚,死亡現(xiàn)場(chǎng)離奇詭異谢澈,居然都是意外死亡锥忿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門淹朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钉答,“玉大人,你說我怎么就攤上這事仑性∮冶模” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵晨汹,是天一觀的道長(zhǎng)贷盲。 經(jīng)常有香客問我,道長(zhǎng)慨灭,這世上最難降的妖魔是什么球及? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任吃引,我火速辦了婚禮,結(jié)果婚禮上镊尺,老公的妹妹穿的比我還像新娘庐氮。我一直安慰自己,他們只是感情好弄砍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布音婶。 她就那樣靜靜地躺著,像睡著了一般寸士。 火紅的嫁衣襯著肌膚如雪碴卧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天谐宙,我揣著相機(jī)與錄音界弧,去河邊找鬼。 笑死划栓,一個(gè)胖子當(dāng)著我的面吹牛条获,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播委煤,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼修档,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼吱窝!你這毒婦竟也來了迫靖?” 一聲冷哼從身側(cè)響起兴使,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤发魄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后励幼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年俺孙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掷贾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡场靴,死狀恐怖港准,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情轨帜,我是刑警寧澤衩椒,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站苟弛,受9級(jí)特大地震影響阁将,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荔睹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一言蛇、第九天 我趴在偏房一處隱蔽的房頂上張望腊尚。 院中可真熱鬧,春花似錦婿斥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽志群。三九已至,卻和暖如春锌云,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彬向。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工娃胆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留讲衫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓招驴,卻偏偏與公主長(zhǎng)得像枷畏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子触趴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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