用Python写网络爬虫——学习笔记(2)

【3个简单的爬虫实例】

**3种爬取网站的常用方法:

爬取网站地图(sitemap,包含了一个网站所有链接的xml格式文件)
遍历每个网页的数据库ID
跟踪网页链接
 
下载感兴趣的网页(下载html)  

为后文的三个爬虫的实现做铺垫


    1) 使用Python的urllib2模块下载URL
**互联网工程任务组定义了HTTP错误的完整列表(tools.ietf.org/html/rfc7231#section-6)

4XX错误发生在请求存在问题时,5XX错误发生在服务端存在问题时。

当发生5XX错误时需要重新下载网页,代码示例:

import urllib2
def download(url, num_retries=2):  #默认重新下载次数为2
    print ‘Downloading:’,url
    try:
        html=urllib2.urlopen(url).read()
    except urllib2.URLError as e:  #所请求的网页不存在等异常
        print ‘Downlading error:’ e.reason
        html=None
        if num_retries > 0:
            if hasattr(e, ’code’ ) and 500 <= e.code <600:
            return download(url,num_retries-1)
     return html



   
   



   2) 设置用户代理模块urllib2默认的用户代理是Python-urllib/2.7,但某些网站会封禁这个默认的用户代理,因此为了下载更加可靠,需要对用户代理进行设定。
对上面的代码进行修改优化:

import urllib2
def download(url, num_retries=2,user_agent='用户代理名'):  #默认重新下载次数为2
    print ‘Downloading:’,url
    headers = {'User-agent':user-agent}
    request = urllib2.Request(url,headers=headers)
    try:
        html=urllib2.urlopen(url).read()
    except urllib2.URLError as e:  #所请求的网页不存在等异常
        print ‘Downlading error:’ e.reason
        html=None
        if num_retries > 0:
            if hasattr(e, ’code’ ) and 500 <= e.code <600:
            return download(url,num_retries-1,,user_agent='用户代理名')
     return html


 第一个爬虫:网站地图爬虫

用sitemap下载所有网页,正则表达式,从<loc>标签中提取出链接网站的URL
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。 详细内容见网站:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2

def crawl_sitemap(url):
    sitemap = download(url) 				#download the sitemap file
    links = re.findall('<loc>(.*?)</loc>',sitemap) 	#extract the sitemap linls
    for link in links:				#download each link
        html = download(link)


第二个爬虫:ID遍历爬虫

利用网站结构的弱点,访问其内容
* http://example.webscraping.com/places/default/view/Afghanistan-1
* http://example.webscraping.com/places/default/view/Australia-14
* http://example.webscraping.com/places/default/view/Brazil-32
这些URL的特点是只在结尾处有区别,包括国家名和ID,国家名作为页面别名通常被web服务器忽略,只使用ID来匹配数据库中的相关记录,将页面别名除去仍可以找到该链接。

ID遍历爬虫不适用的情况:

○1 有些网站会检查页面别名
○2 有些网站使用不连续的大数值ID、使用非数值ID


import itertools
for page in itertools.count(1):
    url = 'http://example.webscraping.com/view/-%d' % page
    if html is None:
        break
    else:
        # success - can scrape the result
        pass

第三个爬虫:链接爬虫

让爬虫表现得更像普通用户,跟踪链接,访问感兴趣的内容
使用链接爬虫,只下载所需的网页。使用正则表达式来确定需要下载哪些页面
注意一个问题:浏览器可以根据相对链接(没有协议和服务器部分)正常工作,但是urllib2不可以,为了让urllib2能够定位网页,需要将链接转换为绝对链接的形式,这可以用Python自带的urlparse模块实现,使用urlparse模块创建绝对路径。

import urlparse
def link_crawler(seed_url, link_regex):
    #crawl from the given seed URL following links matched by link_regex
    crawl_queue = [seed_url]
    #记录哪些链接已被爬取过,避免重复下载
    seen = set(crawl_queue)
    while crawl_queue:
        url = crawl_queue.pop()
        html = download(url)
        for link in get_links(html):
            if re.match(link_regex, link):
                 #创建绝对路径
                 link = urlparse.urljoin(seed_url, link)
                if link not in seen:
                    seen.add(link)
                    crawl_queue.append(link)


def get_links(html):
    """return a list of links from html
    """
    webpage_regex = re.compile('<a[^>]+href=["\'](.*?)["\']', re.IGNORECASE)
    return webpage_regex.findall(html)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个提供在线教育的学习平台,他们提供了Python爬虫的相关教学课程。通过学习这些课程,你可以获得Python基础知识、前端基础知识、计算机网络基础以及爬虫原理等方面的知识。Python基础教学可以参考B站尚硅谷的教学视频,这些视频可以帮助你建立起对Python的基本认识。而前端基础知识包括HTML、CSS和JavaScript的学习,它们分别代表网页的骨架、肌肉和皮肤,只有结合起来才能形成一个完整的网页。此外,你还可以通过学习计算机网络基础来理解HTTP和HTTPS、URL以及网页请求等内容。爬虫原理也是其中的一部分内容,它可以帮助你了解如何通过爬虫程序获取网页数据。所以,如果你对Python爬虫感兴趣,尚硅谷提供的Python爬虫课程可能是一个不错的选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [零基础自学python爬虫笔记Day1——爬虫的基本原理](https://blog.csdn.net/Seyhang/article/details/119420052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Python爬虫】urllib库——尚硅谷](https://blog.csdn.net/qq_48108092/article/details/126097408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值