一、编写第一个网络爬虫

  为了抓取网站,我们需要下载含有感兴趣的网页,该过程一般被称为爬取(crawling)。爬取一个网站有多种方法,而选择哪种方法更加合适,则取决于目标网站的结构。

  首先探讨如何安全的下载网页,让后介绍3中爬去网站的常见方法:

    -- 爬取网站地图;

    -- 遍历每个网页的数据库 ID;

    -- 跟踪网页链接;

1、下载网页

  要想爬取网页,我们首先将其下载下来。下面的实例脚本使用 Python 的 urllib2 模块下载 URL:

import urllib2
def download(url):
return urllib2.urlopen(url).read()

  当传入 URL 参数时,该函数将会下载网页并返回其 HTML 。不过,这个代码片段存在一个问题,即当下载网页时,饿哦们可能会遇到一些无法控制的错误,比如请求的页面可能不存在,此时,urllib2 会抛出异常,然后退出脚本。安全起见,下面给出一个更健壮的版本,可以捕获这些异常:

import urllib2

def download(url):
print('Downloading:', url)
try:
html = urllib2.urlopen(url).read()
except urllib2.URLError as e:
print('Download error:', e.reason)
html = None return html

现在,当出现下载错误是,该函数能够捕获异常,然后返回 None。

当 download 函数遇到 5xx 错误码时,将会递归调用函数自身进行重试。

import urllib2

def download(url, num_retries = ):
print('Downloading:', url)
try:
html = urllib2.urlopen(url).read()
except urllib2.URLError as e:
print('Download error:', e.reason)
html = None
if num_retries > :
if hasattr(e, 'code') and <= e.code < :
return download(url, num_retries - )

此外,该函数还增加了一个参数,用于设定重试下载的次数,其默认值为两次。

2、设置用户代理

  默认情况下,urllib2 使用 Python-urllib/2.7 作为用户下载网页内容,其中 2.7 是 python的版本号,如果能使用可辨别的用户代理则更好。这样可以避免爬虫遇到的一些问题。此外,也许是因为曾经经历过质量不佳的Python网络爬虫造成的服务器过载,一些网站还会封禁这个默认的用户代理。

  因此,为了下载更可考,我们需要控制用户代理的设定。下面代码对 download 函数进行了修改。设定了一个默认的用户代理 “wswp”(即 We Scraping with Python 的手字母缩写)

import urllib2

def download(url, user_agent = 'wswp', num_retries = ):
print('Downloading :', url)
headers = {'User-agent':user_agent}
request = urllib2.Request(url, headers = headers)
try:
html = urllib2.urlopen(request).read()
except urllib2.URLError as e:
print('Download error:', e.reason)
html = None if num_retries > :
if hasattr(e, 'code') and <= e.code < :
return download(url, user_agent, num_retries - ) return html

现在我们拥有一个灵活的下载函数,该函数能够捕获异常,重试下载并设置了用户代理。

  

python 网络爬虫(二)的更多相关文章

  1. 【Python网络爬虫二】使用urllib2抓去网页内容

    在Python中通过导入urllib2组件,来完成网页的抓取工作.在python3.x中被改为urllib.request. 爬取具体的过程类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求 ...

  2. Python网络爬虫(二)

    Urllib库之解析链接 Urllib库里有一个parse这个模块,定义了处理URL的标准接口,实现 URL 各部分的抽取,合并以及链接转换.它支持如下协议的 URL 处理:file.ftp.goph ...

  3. python网络爬虫之自动化测试工具selenium[二]

    目录 前言 一.获取今日头条的评论信息(request请求获取json) 1.分析数据 2.获取数据 二.获取今日头条的评论信息(selenium请求获取) 1.分析数据 2.获取数据 房源案例(仅供 ...

  4. python 网络爬虫(二) BFS不断抓URL并放到文件中

    上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能. 本篇追加如下功能: [1]广度优先搜索不断抓URL,直到队列为空 [2]把所有的URL写 ...

  5. Python网络爬虫

    http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...

  6. Python网络爬虫笔记(五):下载、分析京东P20销售数据

    (一)  分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1.      翻页的时候,谷歌F12的Network页签可以看到下面 ...

  7. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  8. Python网络爬虫与如何爬取段子的项目实例

    一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...

  9. 【python网络爬虫】之requests相关模块

    python网络爬虫的学习第一步 [python网络爬虫]之0 爬虫与反扒 [python网络爬虫]之一 简单介绍 [python网络爬虫]之二 python uillib库 [python网络爬虫] ...

随机推荐

  1. Python(四)生成器 和 杨辉三角

    学习链接: http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143177992 ...

  2. SQL 层级数据查询出树形状态

    WITH TEST AS (SELECT  DEPTID,PARENTDEPT,SORTORDER,1 SPAC,CONVERT(CHAR(200),RTRIM(DEPTID)+CONVERT(CHA ...

  3. Codeforces 1313C.Skyscrapers

    题目链接 题意是给你一个数组,问你如何建造,使得每个点都不小于其左右的点,包括不相邻的点 分析题意,容易得知,就是找一个点两侧的不上升序列且带修,那我们就分别从头跑一遍,从尾跑一遍,两者相加就是每个点 ...

  4. matplotlib显示AttributeError: 'module' object has no attribute 'verbose'

    解决办法:file-settings-tools-python scientific,将show plots in toolwindow前面的对号去掉即可.

  5. PTA----7-3树的遍历

    7-3 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数 ...

  6. Spring Boot 2.x 入门前的准备-IntelliJ IDEA 开发工具的安装与使用

    常用的用于开发 spring boot 项目的开发工具有 eclipse 和 IntelliJ IDEA 两种,最近有声音提出 visual code 也开始流行开发 java,而且确实如此, vs ...

  7. Cisco无线mDNS

    1.mDNS介绍 两个协议:mDNS和Bonjour mDNS: mDNS(Multicast DNS):主要实现了在没有传统DNS Server的情况下使用LAN内的主机实现相互发现和通信. 使用U ...

  8. 在tomcat启动时解析xml文件,获取特定标签的属性值,并将属性值设置到静态变量里

    这里以解析hibernate.cfg.xml数据库配置信息为例,运用dom4j的解析方式来解析xml文件. 1.在javaWeb工程里新建一个java类,命名为GetXmlValue.java,为xm ...

  9. 【原】简单shell练习(六)

    1.shell获取进程号并杀掉该进程 kill - $(ps -ef | grep node| grep -v grep | awk '{print $2}') 解析: ps (processStat ...

  10. pytorch资料

    torchvision是独立于pytorch的关于图像操作的一些方便工具库. torchvision的详细介绍在:https://pypi.org/project/torchvision/ torch ...