文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
6.4 HTML 解析器
HTML解析器使用BeautifulSoup4进行HTML解析。需要解析的部分主要分为提取相关词条页面的URL和提取当前词条的标题和摘要信息。
先使用Firebug查看一下标题和摘要所在的结构位置,如图6-4所示。
图6-4 HTML结构位置
从上图可以看到标题的标记位于<dd class=“lemmaWgt-lemmaTitle-title”><h1></h1>,摘要文本位于<div class=“lemma-summary”label-module=“lemmaSummary”>。
最后分析一下需要抽取的URL的格式。相关词条的URL格式类似于<a target=“_blank”href=“/view/7833.htm”>万维网</a>这种形式,提取出a标记中的href属性即可,从格式中可以看到href属性值是一个相对网址,可以使用urlparse.urljoin函数将当前网址和相对网址拼接成完整的URL路径。
HTML解析器主要提供一个parser对外接口,输入参数为当前页面的URL和HTML下载器返回的网页内容。解析器HtmlParser.py程序的代码如下:
# coding:utf-8 import re import urlparse from bs4 import BeautifulSoup class HtmlParser(object): def parser(self,page_url,html_cont): ''' 用于解析网页内容,抽取URL和数据 :param page_url: 下载页面的URL :param html_cont: 下载的网页内容 :return:返回URL和数据 ''' if page_url is None or html_cont is None: return soup = BeautifulSoup(html_cont,'html.parser',from_encoding='utf-8') new_urls = self._get_new_urls(page_url,soup) new_data = self._get_new_data(page_url,soup) return new_urls,new_data def _get_new_urls(self,page_url,soup): ''' 抽取新的URL集合 :param page_url: 下载页面的URL :param soup:soup :return: 返回新的URL集合 ''' new_urls = set() # 抽取符合要求的a标记 links = soup.find_all('a',href=re.compile(r'/view/\d+\.htm')) for link in links: # 提取href属性 new_url = link['href'] # 拼接成完整网址 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): ''' 抽取有效数据 :param page_url:下载页面的URL :param soup: :return:返回有效数据 ''' data={} data['url']=page_url title = soup.find('dd',class_='lemmaWgt-lemmaTitle-title').find('h1') data['title']=title.get_text() summary = soup.find('div',class_='lemma-summary') # 获取tag中包含的所有文本内容,包括子孙tag中的内容,并将结果作为Unicode字符串返回 data['summary']=summary.get_text() return data
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论