从百度百科爬取十个页面:
1. 路径管理模块:url_manager.py
维护两个集合:待爬取的url 、 已爬取的url
方法:
(1)向管理器中添加一个新的url
(2)向管理器中添加批量新的url
(3)判断是否有新的待爬取的url
(4)获取一个待爬取的url
2. HTML下载模块:html_downloader.py
下载页面内容
方法:下载页面内容:
from urllib.parse import quote
url_ = quote(new_url, safe=string.printable) #解决请求路径中含义中文或特殊字符
request.urlopen(url_).read().decode(“utf8”) #返回处理后的html文档
3. 页面解析模块:html_parser.py
from bs4 import BeautifulSoup
import re
from urllib import parse
方法:
(1)获取BeautifulSoup 对象:
soup = BeautifulSoup(html_context, "html.parser")
(2)获取符合条件的待爬取网址集合
new_urls = set()
links = soup.find_all('a', href=re.compile(r'/item/\w+'))
for link in links:
new_url = link["href"]
# 例如page_url=http://baike.baidu.com/item/Python new_url=/item/史记·2016?fr=navbar
# 则使用parse.urljoin(page_url,new_url)后 new_full_url = http://baike.baidu.com/item/史记·2016?fr=navbar
new_full_url = parse.urljoin(page_url, new_url)
new_urls.add(new_full_url)
return new_urls
(3)获取爬取出来的数据信息集合
#
red_data = {}
red_data['url'] = page_url
title_node = soup.find('dd', class_="lemmaWgt-lemmaTitle-title").find('h1')
# 获取标题内容
red_data['title'] = title_node.get_text()
#
summary_node = soup.find('div', class_="lemma-summary")
red_data['summary'] = summary_node.get_text()
return red_data
(4)写入网页显示模块: html_output.py