Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码

通过 正则表达式 来获取一个网页中的所有的 URL链接,并下载这些 URL链接 的源代码

使用的系统:Windows 10 64位
Python 语言版本:Python 2.7.10 V
使用的编程 Python 的集成开发环境:PyCharm 2016 04
我使用的 urllib 的版本:urllib2

注意: 我没这里使用的是 Python2 ,而不是Python3


一 . 前言

通过之前两节(爬取一个网页 的网络爬虫解决爬取到的网页显示时乱码问题),我们终于完成了最终的 download() 函数。
并且上上一节 ,我们通过网站地图解析里面的URL的方式爬取了目标站点的所有网页。在 上一节,介绍一种方法来爬取一个网页里面所有的链接网页。这一节,我们通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码。


二 . 简介

到目前为止,我们已经利用目标网站的结构特点实现了两个简单爬虫。只要这两个技术可用,就应当使用其进行爬取,因为这两个方法最小化了需要下载的网页数量。不过,对于一些网站,我们需要让爬虫表现得更像普通用户:跟踪链接,访问感兴趣的内容。

通过跟踪所有链接的方式,我们可以很容易地下载整个网站的页面。但是这种方法会下载大量我们并不需要的网页。例如,我们想要从一个在线论坛中爬取用户账号详情页,那么此时我们只需要下载账户页,而不需要下载 讨论轮贴的页面。本篇博客中的链接爬虫将使用正则表达式来确定需要下载那些页面。


三 . 初级代码

import re

def link_crawler(seed_url, link_regex):
    """Crawl from the given seed URL following links matched by link_regex
    """
    crawl_queue = [seed_url]
    while crawl_queue:
        url = crawl_queue.pop()
        html = download(url)
        # filter for links matching our regular expression
        for link in get_links(html):
            if re.match(link_regex, link):
                crawl_queue.append(link)

def get_links(html):
    """Return a list of links from html
    """
    # a regular expression to extract all links from the webpage 
    webpage_regex = re.compile('<a[^>]+href=["\'](.*?)["\']', re.IGNORECASE)
    # list of all links from the webpage
    return webpage_regex.findall(html)

四 . 讲解初级代码

1 .

def link_crawler(seed_url, link_regex):

这个函数就是我们要在外部使用的函数。功能:先下载 seed_url 网页的源代码,然后提取出里面所有的链接URL,接着对所有匹配到的链接URL与link_regex 进行匹配,如果链接URL里面有link_regex内容,就将这个链接URL放入到队列中,下一次 执行 while crawl_queue: 就对这个 链接URL 进行同样的操作。反反复复,直到 crawl_queue 队列为空,才退出函数。


2 .

get_links(html) 函数的功能:用来获取 html 网页中所有的链接URL


3 .

webpage_regex = re.compile('<a[^>]+href=["\']'(.*?)["\']', re.IGNORECASE)

做了一个匹配模板,存在 webpage_regex 对象里面 。匹配<a href="xxx"> 这样的字符串,并提取出里面xxx的内容,这个xxx就是网址 URL


4 .

return webpage_regex.findall(html)

使用 webpage_regex 这个模板对 html 网页源代码匹配所有符合<a href="xxx"> 格式的字符串,并提取出里面的 xxx 内容。


详细的正则表达式的知识,请到这个网站了解:

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值