用Python从百度百科爬取十个页面

从百度百科爬取十个页面:

 

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)获取爬取出来的数据信息集合

     #

Python

        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

你可能感兴趣的:(python)