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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

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

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

本文介紹了Beautiful Soup,PYTHON實現的HTML/XML標記的解析器;簡要描述了Beautiful Soup的安裝以及使用;最后以抽取微博用戶關注信息為例詳細的演示了如何使用Beautiful Soup。

什么是Beautiful Soup

Beautiful Soup是用PYTHON實現的HTML/XML標記的解析器。它提供簡單和通用的方法對HTML/XML語法樹進行瀏覽(navigating),搜索(searching)以及修改(searching)。它甚至可以針對不規范的標記生成語法樹,可以大大地減少開發人員的時間。

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很簡單,如果你已經安裝過pip或者easy_install,如果您還沒有安裝過Python安裝工具,建議您參考Install Python Setuptools/Distribute for Python2 and Python3。

sudo easy_install beautifulsoup4

需要注意的是:BeautifulSoup4支持Python 2.x和3.x,而BeautifulSoup3只支持Python 2.x,Beautiful Soup官網建議大家應該使用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

首先,導入Beautiful Soup。

from bs4 import BeautifulSoup

注意如果你使用的是BeautifulSoup3,那么導入語句可能是:

from BeautifulSoup import BeautifulSoup

然后,使用BeautifulSoup為你生成標記語言的語法樹。

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

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

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

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

Beautiful Soup實例:解析微博用戶的關注信息

社交網絡中的關注信息(followings)是用戶對什么人/東西感興趣的一種表達,從關注信息中可以得到用戶的興趣偏好,又因為關注信息有用戶自己維護,所以相對于粉絲(followers)信息更能體現個人偏好。以微博來說,關注就是用戶關注的人,一般認為用戶是根據自己的興趣愛好出發有選擇的關注帳號。

微博中有兩種關注,我的關注和他人的關注,由于這兩種關注的頁面結構不同,所以在解析的時候需要分別對待,但是分析的過程是同理的,只是在抽取數據是的頁面標簽不一樣,使用上面的Beautiful Soup工具,抽取時標簽的定位會很容易,這就是使用Beautiful Soup帶來的好處。

1.使用瀏覽器的Inspect Element功能理解頁面的結構

最新版的Chrome和Firefox都自身內置有Inspect Element功能,在編寫代碼時,可能要經常的使用它來定位要尋找的頁面元素。Chrome瀏覽器Inspect Element的使用請參考Chrome Developer Tools - Elements Panel。

2.從頁面中提取用戶關注的HTML字段,構建Beautiful Soup對象

通過上面一步的分析,我們大致了解用戶關注列表的頁面結構,接下來就把頁面文件/流導入到Beautiful Soup中,讓它為我們生成頁面結構樹。可是當我們查看新浪微博頁面源碼的時候,情況卻不是這樣的,我們發現頁面源碼中很多信息并不是以HTML元素的形式呈現,而是以plain文本形式放到了頁面的Javacript腳本里面,這時就更加凸顯了Beautiful Soup的偉大之處了,只要我們在Script里面找到了相應的代碼(實際上是json格式存放的數據),抽取出來再導入到Beautiful Soup中,這個問題也就迎刃而解。下面的正則表達式用來從頁面中提取Script中的json數據并且使用其中的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.通過Beautiful Soup獲取需要的頁面元素,并從中抽取感興趣的信息

通過上一步獲得following的HTML信息,導入到Beautiful Soup中,接下來就使用Beautiful Soup抽取信息了。如何去定位元素當然有很多方式,結合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)

結束語

文中闡述了如何使用Beautiful Soup抽取微博頁面的用戶關注信息,最后有幾點需要提出:

1.模擬用戶登錄

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

2.分頁抽取

解析頁面http://weibo.com/{uid}/follow可以獲取用戶關注的總頁面數,通過http://weibo.com/{uid}/follow?page={page_num}可以實現分頁抽取。

相關閱讀

2. 基于UID的WEIBO信息抓取框架WEIBO_SCRAPY,詳細介紹了多線程WEIBO數據抓取框架WEIBO_SCRAPY。

---EOF---

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。