有以下文件html.html:
想要提取全部標(biāo)簽<h4></h4>內(nèi)的文本,可使用如下Python代碼:
import re
with open("html.html",'rU') as strf:
....str = strf.read()
res = r'(?<=<h4>).*?(?=</h4>)'
li = re.findall(res,str)
with open("new.txt","w") as wstr:
....for s in li:
........wstr.write(s)
........wstr.write("\r\n")
........print(s,'\r\n')
正則表達(dá)式r'(?<=<h4>).*?(?=</h4>)中括號(hào)部分屬于向后向前查找,相當(dāng)于字符串作為邊界進(jìn)行查找。
運(yùn)行后會(huì)將標(biāo)簽<h4></h4>內(nèi)的文本提取到文件new.txt:
-End-
信我或關(guān)注微信號(hào):獅范課,回復(fù):學(xué)習(xí),獲取免費(fèi)學(xué)習(xí)資源包。
如有以下文件html.html:
想要提取全部標(biāo)簽<h4></h4>內(nèi)的文本,可使用如下Python代碼:
import re
with open("html.html",'rU') as strf:
....str = strf.read()
res = r'(?<=<h4>).*?(?=</h4>)'
li = re.findall(res,str)
with open("new.txt","w") as wstr:
....for s in li:
........wstr.write(s)
........wstr.write(" ")
........print(s,' ')
正則表達(dá)式r'(?<=<h4>).*?(?=</h4>)中括號(hào)部分屬于向后向前查找,相當(dāng)于字符串作為邊界進(jìn)行查找。
運(yùn)行后會(huì)將標(biāo)簽<h4></h4>內(nèi)的文本提取到文件new.txt:
來源網(wǎng)絡(luò),侵權(quán)聯(lián)系刪除
私信我或關(guān)注微信號(hào):獅范課,回復(fù):學(xué)習(xí),獲取免費(fèi)學(xué)習(xí)資源包。
取網(wǎng)頁(yè)源代碼——Requests 工具包
在我們提取網(wǎng)絡(luò)信息之前,我們必須將網(wǎng)頁(yè)的源代碼進(jìn)行提取,Requests工具包現(xiàn)在可以說是最好用和最普及的靜態(tài)網(wǎng)頁(yè)爬蟲工具,它是由大神Kenneth Reitz所搭建的。在Requests的官方介紹里,Requests所遵守的哲學(xué)理念是:
1.Beautiful is better than ugly. (美勝過丑)
2.Explicit is better than implicit.(清晰勝過隱匿)
3.Simple is better than complex.(簡(jiǎn)單勝過復(fù)雜)
4.Complex is better than complicated.(復(fù)雜勝過繁瑣)
5.Readability counts.(可讀性很重要)
Requests工具包的使用非常簡(jiǎn)單,最主要使用的函數(shù)為requests.get(url),其中參數(shù)url就是我們想提取源代碼的網(wǎng)頁(yè),再通過requests.get(url).text將頁(yè)面轉(zhuǎn)換為字符串,就可以供我們使用了。
信息提取——Xpath
我們普通的網(wǎng)頁(yè)一般都是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)頁(yè)的源碼,其中 <bookstore> 是文檔節(jié)點(diǎn), <author>J K. Rowling</author> 是元素節(jié)點(diǎn), lang="en" 是屬性節(jié)點(diǎn)。 J K. Rowling 、2005 和29.99是文本(文本通常就是我們想爬取的內(nèi)容)。
實(shí)例分享——爬取豆瓣電影的信息
接下來我們做一個(gè)很簡(jiǎn)單的實(shí)例分享,我們想爬取在豆瓣網(wǎng)上的電影《超時(shí)空同居》的導(dǎo)演和演員信息。
首先我們找到電影的URL:
右鍵點(diǎn)擊看網(wǎng)頁(yè)的源代碼 view page source(或者可以進(jìn)入開發(fā)者模式(insepect)):
接下來我們就進(jìn)入網(wǎng)頁(yè)源代碼了,我們想要搜集的信息就在源代碼里,只用輸入關(guān)鍵字就可以查看到,比如這里我們輸入’雷佳音’就定位到了我們想要尋找的位置:
接下來我們就需要分析TML的格式了,例如我們要找到所有的主演:
大家可以看到有一個(gè)普遍的規(guī)律:主演的名字所對(duì)應(yīng)的節(jié)點(diǎn)名都為a,屬性都為rel="v:starring",這樣我們就可以很輕易的用xpath的語法定位到擁有這個(gè)元素的節(jié)點(diǎn),然后將所有的結(jié)果找出。
同理,導(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)頁(yè), text將源網(wǎng)頁(yè)轉(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)
最后我們得到一個(gè)字典集的結(jié)果:
{'電影': '超時(shí)空同居 (豆瓣)', '導(dǎo)演': ['蘇倫'], '演員': ['雷佳音', '佟麗婭', '張衣', '于和偉', '王正佳', '陶虹', '李念', '李光潔', '楊玏', '范明', '徐崢', '楊迪', '方齡', '陳昊']}
實(shí)例分享2——爬取帶有json格式豆瓣電影的信息
首先,json是一種輕量級(jí)的數(shù)據(jù)交換格式,它簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言,易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。
在我們爬蟲的過程中,我們有時(shí)候可以在開發(fā)者模式返回的網(wǎng)頁(yè)里找到完整的json格式的數(shù)據(jù),這時(shí)候我們就可以運(yùn)用requests包里的json函數(shù)將爬取到的原文本轉(zhuǎn)化格式,從而方便我們提取內(nèi)容。我們還是拿豆瓣電影舉例:
這是點(diǎn)擊分類后我們看到的電影信息,假如我們想爬取這些電影的信息,我們可以點(diǎn)擊右鍵進(jìn)入開發(fā)者模式(inspector)。
在打開開發(fā)者模式之后一定要記得刷新一次,否則不會(huì)顯示之前接收到的頁(yè)面信息。然后我們選擇右邊標(biāo)簽的network,下面再點(diǎn)擊XHR選項(xiàng),我們就會(huì)看到一個(gè)返回的網(wǎng)頁(yè),雙擊它。
上圖就是打開后的json文件,由于我的電腦下載了json插件的緣故,它的格式要更清晰(使用Chrome瀏覽器的同學(xué)可以進(jìn)入Chrome商店下載Juan Ramón JSON Beautifier Chrome插件)。Json文件其實(shí)也可以被理解為是一個(gè)大的字典,里面有很多層小的字典和列表,我們找到j(luò)son網(wǎng)頁(yè)后只需要用requests變成json格式即可方便的提取信息。
代碼如下:
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。