这篇文章将为大家详细讲解有关python爬虫中html转换树形结构的示例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
BeautifulSoup就是一个专门用来从html和xml文档中提取数据的库,现在的版本是bs4。除了BeautifulSoup之外,python还具有一些其它的库,如HTMLParser等,作用都差不多。解析器结合正则表达式,很容易将我们所需要的内容提取出来。
首先安装BeautifulSoup:
$pip install beautifulsoup4
在python环境下导入字符串,创建BeautifulSoup对象:
from bs4 import BeautifulSoup soup = BeautifulSoup(html_str, 'lxml', from_encoding='utf-8')
BeautifulSoup可以将复杂的html文档转化成树形结构,每个节点都是pyhton对象,所有的对象可以归纳为4种:
Tag
NavigableString
BeautifulSoup
Comment
HtmlParser将要接收一个字符串,输出data和新采集到的一些urls。之前写过的add_new_urls()函数接受一个可迭代对象,所以这里新的urls我们采用集合的形式(也可采用列表的形式)返回,data采用字典的形式存储并返回。
此外,我们观察到,词条内容中含有的链接为"/item/..."的形式,这并不是一个完整的url,要在前面加上“https://baike.baidu.com”进行补全,利用urlparse模块可以很方便地完成这个任务(当然也可以使用拼接字符串的方式)。
下面就是HtmlParser的完整代码:
''' ----------------------------------------------------------------- HtmlParser ''' import re #正则表达式模块 import urlparse #用来拼接url from bs4 import BeautifulSoup class HtmlParser(object): def parser(self, page_url, html_cont): ''' 解析器主函数 parm page_url:一个url parm html_cont:网页内容,格式为字符串 return: urls, 数据;格式为 set, dict ''' if page_url is None or html_cont is None: print "page_url is None" return #建立bs对象,使用html.parser进行解析 soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='urf-8') print "soup established" #接下来分别调用两个私有函数返回urls和data new_urls = self._get_new_urls(page_url, soup) print "new_urls get" new_data = self._get_new_data(page_url, soup) print "new_data get" return new_urls, new_data def _get_new_urls(self, page_url, soup): ''' 从页面中抽取指向其他词条的链接 parm page_url: 当前页面url parm soup: beautifulsoup对象 return: 新url的set ''' new_urls = set() #根据正则表达式规则对页面内的链接进行筛选,留下想要的链接 links = soup.find_all('a', href=re.compile(r'/item/.+')) for link in links: #每个link都是Tag对象,Tag对象的操作方法与字典相同 new_url = link['href'] #借助urljoin,可以很方便地拼接url new_full_url = urlparse.urljoin(page_url, new_url) new_urls.add(new_full_url) return new_urls def _get_new_data(self, page_url, soup): ''' 提取想要的数据 parm page_url: 当前页面url parm soup: beautifulsoup对象 return: dict ''' #声明字典 data = {} data['url'] = page_url data['title'] = soup.find('dd', class_='lemmaWgt-lemmaTitle-title').find('h2').get_text() data['summary'] = soup.find('div', class_='lemma-summary').get_text() return data
关于python爬虫中html转换树形结构的示例就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。