2018-9月 python3爬取百度百科100个页面

前阵子开始学习python,刚接触爬虫不久,参考其它csdn博客大神的文章简单做了一个demo

# python3中用urllib.request表示python2中的urllib2
import urllib.request as urllib2
# 运用正则表达式
import re
# urlparse
import urllib.parse as urlparse
# 使用第三方模块,使用BeautifulSoup
from bs4 import BeautifulSoup as bs
# 请求的url中文解决
from urllib.parse import quote
import string
# 网页出现错误的模块
from urllib.error import URLError,HTTPError,ContentTooShortError
# 存储爬取的数据
data={}
# 爬取的url
urls={}

# 下载url
def download(url):
    print("download..."+url)
    # 对url错误作异常处理
    try:
        html= urllib2.urlopen(url)
    except(URLError,HTTPError,ContentTooShortError) as e:
        print("download error:"+e.reason)
        html=None
    return html


# 解析拿到的url
def parser_html(url,response):
    soup = bs(response, 'html.parser')
    return soup


# 打印出信息
def out_information(soup):
    try:
        # 打印出title标签的内容
        data['title']=soup.title.string
        summary_node = soup.find('div', class_="lemma-summary")
        data['summary']=summary_node.get_text()
        print('爬取的标题:'+data['title'])
        print('爬取的内容:')
        print(data['summary'])
    except:
        print('无法获取内容')


def get_new_urls(page_url, soup):
    # 存放从入口页面拿到的url集合
    new_urls = set()
    count=1
    # 正则匹配所有/item/链接
    links = soup.find_all('a', href=re.compile(r"/item/"))
    for link in links:
        # 控制数量,需要手动作更改,这里为了使爬取一百条,将count改到了119
        # 手动控制的,具体的原因还不清楚
        if(count<119):
            new_url = link['href']
            #urljoin 函数可以将new_url 按page_url 的格式拼接成一个全新的url
            new_full_url = urlparse.urljoin(page_url,new_url)
            new_urls.add(new_full_url)
            # 每拼接完一个页面就加1
            count=count+1

    return new_urls


#    程序入口,注意是双下划线
if __name__=="__main__":
    # 记录页面数
    count = 1
    # 爬虫入口页面
    url = "https://baike.baidu.com/item/%E8%8B%B1%E8%AF%AD/109997"
    # 下载url
    response=download(url)
    # 解析网页
    soup=parser_html(url,response)
    # 打印内容
    out_information(soup)
    # 获取需要爬取的url集合
    urls=get_new_urls(url,soup)
    print(urls)
    for url in urls:
        # 将页面数转换为字符串形式
        srt_count = str(count)
        print('爬取第' + srt_count + '个页面:')
        # 下载url
        response = download(url)
        # 解析网页
        soup = parser_html(url, response)
        # 打印内容
        out_information(soup)
        # 爬完一个页面就加一
        count=count+1

每天进步一点点,开心也多一点点

猜你喜欢

转载自blog.csdn.net/weixin_40169642/article/details/82623214
今日推荐