python3 urlllib爬虫练习--从网站地图下载网页

 Pala   2017-10-14 14:06   44 人阅读   条评论

现在根据网站地图下载网页:

from urllib import requestfrom urllib import error
import re
def download(url, user_agent='wswp', num_retries=2):
    print('Download:', url)
    headers = {'user_agent': user_agent}
    requ = request.Request(url, headers=headers)
    try:
        html = request.urlopen(requ).read()
    # 捕捉错误
    except error.URLError as e:
        print('Download error:', e.reason)
        html = None
        # 循环次数
        if num_retries > 0:
            # 获取网页状态码
            if hasattr(e, 'code'):
                # 状态码是5xx 是服务器端问题,如果是4xx,是请求存在问题。
                if 500 <= e.code <= 600:
                    num_retries -= 1                    # 使用递归
                    return download(url, num_retries)
    return htmldef crawl_sitemap(url):
    # 下载sitemap页面
    sitemap = download(url)
    # 该网站需要转码,否则运行正则时提示  TypeError: cannot use a string pattern on a bytes-like object
    sitemap = sitemap.decode('utf-8')
    # 从页面中提取网址
    links = re.findall('<loc>(.*?)</loc>', sitemap)
    for link in links:
        html = download(link)
crawl_sitemap('http://example.webscraping.com/sitemap.xml')

运行结果:

Download: http://example.webscraping.com/sitemap.xml
Download: http://example.webscraping.com/view/Afghanistan-1
Download: http://example.webscraping.com/view/Aland-Islands-2Download: http://example.webscraping.com/view/Albania-3


本文地址:http://chenxm.cc/post/376.html
版权声明:本文为原创文章,版权归 Pala 所有,欢迎分享本文,转载请保留出处!