Python 网络爬虫 007 (编程) 通过网站地图爬取目标站点的所有网页

摘要:
该系统用于通过网站地图抓取目标站点的所有页面:Windows 1064位Python语言版本:Python 2.7.10V编程Python集成开发环境:PyCharm201604我使用的urllib版本:urllib2Note:我这里不使用Python 2,而不是Python 3-1前言通过前两部分,我们最终完成了最终的下载()功能。本博客介绍了第一种方法:使用目标站点的站点地图文件来抓取目标站点中的所有页面。)',sitemap)findall()函数查找满足条件的所有Str字符串。)˃C: Python27python。exe-i1-4-2-sitemap_刮擦。py现在运行一个站点地图爬虫,从目标站点下载所有页面。
通过网站地图爬取目标站点的所有网页

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

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


一 . 前言

通过前两节(爬取一个网页 的网络爬虫解决爬取到的网页显示时乱码问题),我们终于完成了最终的 download() 函数。
这一节 和我未来的两节,我一个介绍 3种方法来爬取一个站点里面所有的网页。

这一篇博客,就来介绍第一种方法:使用目标网站的网站地图文件Sitemap.xml)来爬取 目标站点里面的所有的网页。


二 . 原理

之前,我们在目标网站的 robots.txt 文件中发现了网站地图(Sitemap.xml 文件),网站地图中包含了这个站点里面所有网页的URL。想要下载目标网站里面的所有网页,我们可以通过一个简单的正则表达式来解析网站地图(Sitemap.xml 文件)。如何解析?很简单,只需要从<loc>标签中提取出 URL 即可,就是这点工作。

在以后的博客中,我还会介绍一种更加健壮的解析方法 — CCS选择器


三 . 代码

import re

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

其中,代码中使用的 download(url) 函数的代码在 这一篇博客的最下面。

四 . 解释代码

需要解释的就是下面这句 使用正则表达式来解析 Sitemap文件里面的 URL

    links = re.findall('<loc>(.*?)</loc>', sitemap)

findall() 函数是找到所有符合条件的Str字符串。<loc>(.*?)</loc>指的是:(.*?) 意思是:匹配所有<loc>(xxxx)</loc> 这样字符串,并将括号内的数据作为结果返回。
详细的内容,请见下面的两个博客:
Python 正则表达式 总结

Python 正则表达式 — findall()方法


五 . 运行

先将 Python 终端交互程序启动:(在 PyCharm 软件 中的 Terminal 窗口里,或者在Windows 系统的DOS窗口。)

> C:Python27python.exe -i 1-4-2-sitema
p_scrape.py

现在运行网站地图爬虫,从目标网站(http://example.webscraping.com/sitemap.xml)中下载所有网页。

>>> crawl_sitemap('http://example.webscraping.com/sitemap.xml')
Downloading:  http://example.webscraping.com/sitemap.xml
Downloading:  http://example.webscraping.com/view/Afghanistan-1
Downloading:  http://example.webscraping.com/view/Aland-Islands-2
Downloading:  http://example.webscraping.com/view/Albania-3
Downloading:  http://example.webscraping.com/view/Algeria-4
...


总结:
可以看到,程序运行的效果和我们的预期一致。
但是不是每个站点都可以依靠Sitemap文件来爬取站点中的每个网页。有些站点可能根本就没有 Sitemap文件。
所以我们下一节在介绍一种方法,它不会依赖Sitemap文件,是使用索引号的方法来爬取一个站点中所有的网页的。

免责声明:文章转载自《Python 网络爬虫 007 (编程) 通过网站地图爬取目标站点的所有网页》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Safe Area Layout GuideVelocity 创建命令缓存下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python3降级为python2(linux)

在Linux上,使用python,有时候需要python2,有时候需要python3,下面简单介绍下将python3换成python2的方法。 1.查看Python目前的版本 直接输入 python 1 可以查看Python版本 2.将/usr/bin目录下的python版本切换 mv /usr/bin/python /usr/bin/python3....

linux下执行python错误: bad interpreter: No such file or directory

 /usr/bin/python^M: bad interpreter: No such file or directory python文件编码格式问题,需要将dos文件格式修改为unix文件格式,修改方法如下: 用如下命令查看文件格式 :set ff 或 :set fileformat 可以看到如下信息 fileformat=dos 或 filefor...

Python自动化之pytest框架使用详解

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点: 简单灵活,容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests) pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(...

Python中的多线程编程,线程安全与锁(一)

1.多线程编程与线程安全相关重要概念 在我的上篇博文聊聊Python中的GIL中,我们熟悉了几个特别重要的概念:GIL,线程,进程,线程安全,原子操作。 以下是简单回顾,详细介绍请直接看聊聊Python中的GIL GIL:Global Interpreter Lock,全局解释器锁。为了解决多线程之间数据完整性和状态同步的问题,设计为在任意时刻只有一个...

四大机器学习编程语言对比:R、Python、MATLAB、Octave

本文作者是一位机器学习工程师,他比较了四种机器学习编程语言(工具):R、Python、MATLAB 和 OCTAVE。作者列出了这些语言(工具)的优缺点,希望对想开始学习它们的人有用。 图源:Pixabay.com GitHub 地址:https://github.com/mjbahmani/10-steps-to-become-a-data-sci...

python GUI界面编程 口算题生成系统

问题描述 口算题生成系统 功能: (1)口算:题目显示在界面上(除法必须是整除),逐个显示题目,用户通过输入框输入计算结果。系统能实时统计正确率,将错误题目打印到文件里。 (2)生成题目:用户选择生成的题目数量,打印时的列数,运算符的数量,将题目生成到docx文件里。 设计说明 (1)拟设计的功能及实现思路、需要用到的知识功能(1)的实现思路: 1.初始化...