日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

网页版微博HTML解析和提取,使用Beautiful Soup抽取网页数据,解析微博用户关注信息...

發(fā)布時(shí)間:2023/12/9 HTML 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网页版微博HTML解析和提取,使用Beautiful Soup抽取网页数据,解析微博用户关注信息... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文介紹了Beautiful Soup,PYTHON實(shí)現(xiàn)的HTML/XML標(biāo)記的解析器;簡(jiǎn)要描述了Beautiful Soup的安裝以及使用;最后以抽取微博用戶關(guān)注信息為例詳細(xì)的演示了如何使用Beautiful Soup。

什么是Beautiful Soup

Beautiful Soup是用PYTHON實(shí)現(xiàn)的HTML/XML標(biāo)記的解析器。它提供簡(jiǎn)單和通用的方法對(duì)HTML/XML語(yǔ)法樹(shù)進(jìn)行瀏覽(navigating),搜索(searching)以及修改(searching)。它甚至可以針對(duì)不規(guī)范的標(biāo)記生成語(yǔ)法樹(shù),可以大大地減少開(kāi)發(fā)人員的時(shí)間。

Beautiful Soup is an HTML/XML parser for Python that can turn even invalid markup into a parse tree. It provides simple, idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers hours or days of work.

安裝Beautiful Soup

安裝Beautiful Soup很簡(jiǎn)單,如果你已經(jīng)安裝過(guò)pip或者easy_install,如果您還沒(méi)有安裝過(guò)Python安裝工具,建議您參考Install Python Setuptools/Distribute for Python2 and Python3。

sudo easy_install beautifulsoup4

需要注意的是:BeautifulSoup4支持Python 2.x和3.x,而B(niǎo)eautifulSoup3只支持Python 2.x,Beautiful Soup官網(wǎng)建議大家應(yīng)該使用BeautifulSoup4而不是BeautifulSoup3。

Beautiful Soup 3 only works on Python 2.x, but Beautiful Soup 4 also works on Python 3.x. Beautiful Soup 4 is faster, has more features, and works with third-party parsers like lxml and html5lib. You should use Beautiful Soup 4 for all new projects.

使用Beautiful Soup

首先,導(dǎo)入Beautiful Soup。

from bs4 import BeautifulSoup

注意如果你使用的是BeautifulSoup3,那么導(dǎo)入語(yǔ)句可能是:

from BeautifulSoup import BeautifulSoup

然后,使用BeautifulSoup為你生成標(biāo)記語(yǔ)言的語(yǔ)法樹(shù)。

soup = BeautifulSoup(open('my.html'))

得到了語(yǔ)法樹(shù)soup之后,就可以調(diào)用相應(yīng)的接口瀏覽,搜索和修改你的標(biāo)記文件。比如下面的語(yǔ)句搜索my.html中所有’action-type’是’user_item’的div:

soup.findAll('div', attrs={'action-type' : 'user_item'})

上面簡(jiǎn)單介紹了Beautiful Soup的安裝和使用,更多Beautiful Soup的文檔請(qǐng)參考官方文檔bs3和bs4。下面我們以從WEIBO.COM頁(yè)面中解析出用戶的關(guān)注信息為例,介紹Beautiful Soup的使用。

Beautiful Soup實(shí)例:解析微博用戶的關(guān)注信息

社交網(wǎng)絡(luò)中的關(guān)注信息(followings)是用戶對(duì)什么人/東西感興趣的一種表達(dá),從關(guān)注信息中可以得到用戶的興趣偏好,又因?yàn)殛P(guān)注信息有用戶自己維護(hù),所以相對(duì)于粉絲(followers)信息更能體現(xiàn)個(gè)人偏好。以微博來(lái)說(shuō),關(guān)注就是用戶關(guān)注的人,一般認(rèn)為用戶是根據(jù)自己的興趣愛(ài)好出發(fā)有選擇的關(guān)注帳號(hào)。

微博中有兩種關(guān)注,我的關(guān)注和他人的關(guān)注,由于這兩種關(guān)注的頁(yè)面結(jié)構(gòu)不同,所以在解析的時(shí)候需要分別對(duì)待,但是分析的過(guò)程是同理的,只是在抽取數(shù)據(jù)是的頁(yè)面標(biāo)簽不一樣,使用上面的Beautiful Soup工具,抽取時(shí)標(biāo)簽的定位會(huì)很容易,這就是使用Beautiful Soup帶來(lái)的好處。

1.使用瀏覽器的Inspect Element功能理解頁(yè)面的結(jié)構(gòu)

最新版的Chrome和Firefox都自身內(nèi)置有Inspect Element功能,在編寫(xiě)代碼時(shí),可能要經(jīng)常的使用它來(lái)定位要尋找的頁(yè)面元素。Chrome瀏覽器Inspect Element的使用請(qǐng)參考Chrome Developer Tools - Elements Panel。

2.從頁(yè)面中提取用戶關(guān)注的HTML字段,構(gòu)建Beautiful Soup對(duì)象

通過(guò)上面一步的分析,我們大致了解用戶關(guān)注列表的頁(yè)面結(jié)構(gòu),接下來(lái)就把頁(yè)面文件/流導(dǎo)入到Beautiful Soup中,讓它為我們生成頁(yè)面結(jié)構(gòu)樹(shù)。可是當(dāng)我們查看新浪微博頁(yè)面源碼的時(shí)候,情況卻不是這樣的,我們發(fā)現(xiàn)頁(yè)面源碼中很多信息并不是以HTML元素的形式呈現(xiàn),而是以plain文本形式放到了頁(yè)面的Javacript腳本里面,這時(shí)就更加凸顯了Beautiful Soup的偉大之處了,只要我們?cè)赟cript里面找到了相應(yīng)的代碼(實(shí)際上是json格式存放的數(shù)據(jù)),抽取出來(lái)再導(dǎo)入到Beautiful Soup中,這個(gè)問(wèn)題也就迎刃而解。下面的正則表達(dá)式用來(lái)從頁(yè)面中提取Script中的json數(shù)據(jù)并且使用其中的HTML字段生成soup:

def parse_followings(page_content):'''@param page_content: html page file or response stream from Internet'''#reguler expression to extract json data which contains html infopatt_view = ''patt = re.compile(patt_view, re.MULTILINE)weibo_scripts = patt.findall(page_content)for script in weibo_scripts:view_json = json.loads(script)if 'html' in view_json and view_json['pid'] == 'pl_relation_hisFollow':html = view_json['html']soup = BeautifulSoup(html)#WOW...we got the soup

3.通過(guò)Beautiful Soup獲取需要的頁(yè)面元素,并從中抽取感興趣的信息

通過(guò)上一步獲得following的HTML信息,導(dǎo)入到Beautiful Soup中,接下來(lái)就使用Beautiful Soup抽取信息了。如何去定位元素當(dāng)然有很多方式,結(jié)合Inspect Element,可以很容易的做到,獲得元素之后就可以抽取需要的信息了。

#all the followings, search according element type(li) and attributesfriendollowings = soup.findAll('li', attrs={'class':'clearfix S_line1', 'action-type' : 'itemClick'})for user_item in friendollowings:action_data = user_item.get('action-data')user_info = {}for field in action_data.split("&"):field_name, field_value = field.split('=')user_info[field_name] = field_valuefor info in [more for more in user_item('div') if isinstance(more, Tag)]:class_name = info['class']if class_name == 'name':user_info['name'] = clean_content(info.a.text)user_info['address'] = clean_content(info.span.text)elif class_name == 'connect':user_info['connect'] = clean_content(info.text)elif class_name == 'face mbspace': #face imageuser_info['face'] = info.a.img['src']elif class_name == 'weibo':pass#user_info['lasttweet'] = clean_content(info.text)

結(jié)束語(yǔ)

文中闡述了如何使用Beautiful Soup抽取微博頁(yè)面的用戶關(guān)注信息,最后有幾點(diǎn)需要提出:

1.模擬用戶登錄

結(jié)合本人的上一篇文章Python模擬登錄新浪微博(使用RSA加密方式和Cookies文件),可以實(shí)現(xiàn)模擬用戶登錄之后發(fā)送用戶關(guān)注的URL請(qǐng)求http://weibo.com/{uid}/follow獲得用戶關(guān)注的頁(yè)面;

2.分頁(yè)抽取

解析頁(yè)面http://weibo.com/{uid}/follow可以獲取用戶關(guān)注的總頁(yè)面數(shù),通過(guò)http://weibo.com/{uid}/follow?page={page_num}可以實(shí)現(xiàn)分頁(yè)抽取。

相關(guān)閱讀

2. 基于UID的WEIBO信息抓取框架WEIBO_SCRAPY,詳細(xì)介紹了多線程WEIBO數(shù)據(jù)抓取框架WEIBO_SCRAPY。

---EOF---

總結(jié)

以上是生活随笔為你收集整理的网页版微博HTML解析和提取,使用Beautiful Soup抽取网页数据,解析微博用户关注信息...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。