Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
有以下文件html.html:
想要提取全部標簽<h4></h4>內的文本,可使用如下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')
正則表達式r'(?<=<h4>).*?(?=</h4>)中括號部分屬于向后向前查找,相當于字符串作為邊界進行查找。
運行后會將標簽<h4></h4>內的文本提取到文件new.txt:
-End-
信我或關注微信號:獅范課,回復:學習,獲取免費學習資源包。
如有以下文件html.html:
想要提取全部標簽<h4></h4>內的文本,可使用如下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,' ')
正則表達式r'(?<=<h4>).*?(?=</h4>)中括號部分屬于向后向前查找,相當于字符串作為邊界進行查找。
運行后會將標簽<h4></h4>內的文本提取到文件new.txt:
來源網絡,侵權聯系刪除
私信我或關注微信號:獅范課,回復:學習,獲取免費學習資源包。
取網頁源代碼——Requests 工具包
在我們提取網絡信息之前,我們必須將網頁的源代碼進行提取,Requests工具包現在可以說是最好用和最普及的靜態網頁爬蟲工具,它是由大神Kenneth Reitz所搭建的。在Requests的官方介紹里,Requests所遵守的哲學理念是:
1.Beautiful is better than ugly. (美勝過丑)
2.Explicit is better than implicit.(清晰勝過隱匿)
3.Simple is better than complex.(簡單勝過復雜)
4.Complex is better than complicated.(復雜勝過繁瑣)
5.Readability counts.(可讀性很重要)
Requests工具包的使用非常簡單,最主要使用的函數為requests.get(url),其中參數url就是我們想提取源代碼的網頁,再通過requests.get(url).text將頁面轉換為字符串,就可以供我們使用了。
信息提取——Xpath
我們普通的網頁一般都是XML文檔格式,當我們想提取里面的內容時,我們需要借助Xpath來分解其中的格式,提取我們想要的內容。在了解Xpath之前我們需要知道四個基本概念:節點、元素、屬性、文本 。我們來看一個例子:
<?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> ?
這就是一個網頁的源碼,其中 <bookstore> 是文檔節點, <author>J K. Rowling</author> 是元素節點, lang="en" 是屬性節點。 J K. Rowling 、2005 和29.99是文本(文本通常就是我們想爬取的內容)。
實例分享——爬取豆瓣電影的信息
接下來我們做一個很簡單的實例分享,我們想爬取在豆瓣網上的電影《超時空同居》的導演和演員信息。
首先我們找到電影的URL:
右鍵點擊看網頁的源代碼 view page source(或者可以進入開發者模式(insepect)):
接下來我們就進入網頁源代碼了,我們想要搜集的信息就在源代碼里,只用輸入關鍵字就可以查看到,比如這里我們輸入’雷佳音’就定位到了我們想要尋找的位置:
接下來我們就需要分析TML的格式了,例如我們要找到所有的主演:
大家可以看到有一個普遍的規律:主演的名字所對應的節點名都為a,屬性都為rel="v:starring",這樣我們就可以很輕易的用xpath的語法定位到擁有這個元素的節點,然后將所有的結果找出。
同理,導演的名字所對應的節點名為a,屬性都為rel=" v:directedBy",我們同樣可以通過這個定位找到相應的文本:
具體的代碼如下:
import requests ? from lxml import etree ? ? ? url='https://movie.douban.com/subject/27133303/?from=showing' #輸入我們的url ? get = requests.get(url).text # get(url) 得到我們的網頁, text將源網頁轉化為字符串 ? ? ? selector = etree.HTML(get) # 將源碼轉換為xpath可以識別的TML格式 ? ? ? info = {} #字典用于儲存信息 ? info['電影'] = selector.xpath('//title/text()')[0].strip() # 定位電影名字 ? info['導演']=selector.xpath('//a[@rel="v:directedBy"]/text()') # 定位導演名字 ? info['演員']=selector.xpath('//a[@rel="v:starring"]/text()') # 定位演員名字 ? print(info)
最后我們得到一個字典集的結果:
{'電影': '超時空同居 (豆瓣)', '導演': ['蘇倫'], '演員': ['雷佳音', '佟麗婭', '張衣', '于和偉', '王正佳', '陶虹', '李念', '李光潔', '楊玏', '范明', '徐崢', '楊迪', '方齡', '陳昊']}
實例分享2——爬取帶有json格式豆瓣電影的信息
首先,json是一種輕量級的數據交換格式,它簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言,易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。
在我們爬蟲的過程中,我們有時候可以在開發者模式返回的網頁里找到完整的json格式的數據,這時候我們就可以運用requests包里的json函數將爬取到的原文本轉化格式,從而方便我們提取內容。我們還是拿豆瓣電影舉例:
這是點擊分類后我們看到的電影信息,假如我們想爬取這些電影的信息,我們可以點擊右鍵進入開發者模式(inspector)。
在打開開發者模式之后一定要記得刷新一次,否則不會顯示之前接收到的頁面信息。然后我們選擇右邊標簽的network,下面再點擊XHR選項,我們就會看到一個返回的網頁,雙擊它。
上圖就是打開后的json文件,由于我的電腦下載了json插件的緣故,它的格式要更清晰(使用Chrome瀏覽器的同學可以進入Chrome商店下載Juan Ramón JSON Beautifier Chrome插件)。Json文件其實也可以被理解為是一個大的字典,里面有很多層小的字典和列表,我們找到json網頁后只需要用requests變成json格式即可方便的提取信息。
代碼如下:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。