python 网络爬虫(二)
一、编写第一个网络爬虫
为了抓取网站,我们需要下载含有感兴趣的网页,该过程一般被称为爬取(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 网络爬虫(二)的更多相关文章
- 【Python网络爬虫二】使用urllib2抓去网页内容
在Python中通过导入urllib2组件,来完成网页的抓取工作.在python3.x中被改为urllib.request. 爬取具体的过程类似于使用程序模拟IE浏览器的功能,把URL作为HTTP请求 ...
- Python网络爬虫(二)
Urllib库之解析链接 Urllib库里有一个parse这个模块,定义了处理URL的标准接口,实现 URL 各部分的抽取,合并以及链接转换.它支持如下协议的 URL 处理:file.ftp.goph ...
- python网络爬虫之自动化测试工具selenium[二]
目录 前言 一.获取今日头条的评论信息(request请求获取json) 1.分析数据 2.获取数据 二.获取今日头条的评论信息(selenium请求获取) 1.分析数据 2.获取数据 房源案例(仅供 ...
- python 网络爬虫(二) BFS不断抓URL并放到文件中
上一篇的python 网络爬虫(一) 简单demo 还不能叫爬虫,只能说基础吧,因为它没有自动化抓链接的功能. 本篇追加如下功能: [1]广度优先搜索不断抓URL,直到队列为空 [2]把所有的URL写 ...
- Python网络爬虫
http://blog.csdn.net/pi9nc/article/details/9734437 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛 ...
- Python网络爬虫笔记(五):下载、分析京东P20销售数据
(一) 分析网页 下载下面这个链接的销售数据 https://item.jd.com/6733026.html#comment 1. 翻页的时候,谷歌F12的Network页签可以看到下面 ...
- 如何利用Python网络爬虫抓取微信朋友圈的动态(上)
今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...
- Python网络爬虫与如何爬取段子的项目实例
一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...
- 【python网络爬虫】之requests相关模块
python网络爬虫的学习第一步 [python网络爬虫]之0 爬虫与反扒 [python网络爬虫]之一 简单介绍 [python网络爬虫]之二 python uillib库 [python网络爬虫] ...
随机推荐
- oracle 多表查询,请教个问题
首先,是有一个合同表,对应数据库表 lg_bill_of_lading_detail 简称 bold 有一个用户表 EMT_USER 简称 e 合同审批 后,合同表里 会有一个审核人AUDI ...
- 安卓之视图View的基本属性
一.在xml布局文件中常用的属性定义 (1) id:指定该视图的编号 (2) layout_width:指定该视图的宽度可以是具体的dp值:可以是match_parent,表示与上级视图一 ...
- 关注Ionic底部导航按钮tabs在android情况下浮在上面的处理
Ionic是一款流行的移动端开发框架,但是刚入门的同学会发现,Ionic在IOS和android的底部tabs显示不一样.在安卓情况下底部tabs会浮上去. 如下图展示: 网上也有很多此类的解决方案 ...
- Windows Server 2012 R2 自动映射公共网络驱动器
1.创建组织单位,在组织单位新建用户或者组 2.新建文件夹(名字无所谓,我这里起名一样方便测试) 3.对文件夹开启共享,设置要共享的用户或者组 4.打开组策略,找到对应的组织单位 5.创建GPO 6. ...
- 深入剖析Windows专业版安装Docker引擎和Windows家庭版Docker引擎安装的区别
原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 公司使用的电脑是Windows专业版,所以配置本机的Docker时会方便许多,后续由于需 ...
- python获取当前文件的上一级目录
import osos.path.dirname(os.path.abspath(__file__))
- vmware虚拟机linux添加硬盘后先分区再格式化操作方法
先在虚拟机里填加硬盘,如图. 进入linux后台,df-l ,没有显示sdc盘,更切换的是,在fdisk中,却有sdc 看fdisk -l,确实有sdc. 说明sdc还没有分区,也没有格式化,也没有挂 ...
- 201771010135杨蓉庆 《面对对象程序设计(java)》第七周学习总结
学习目标 1.深入理解OO程序设计的特征:继承.多态: 2.熟练掌握Java语言中基于类.继承技术构造程序的语法知识: 3.利用继承定义类设计程序,能够设计开发含有1个主类.2个以上用户自定义类的应用 ...
- vue 的模拟数据
首先分析需要什么数据,然后在build下 找到dev-server.js 在里面有一个var 项目名 = express() 在后面添加我们自己需要模拟的数据路由 // 自己添加路由 读取数据 sta ...
- Community Cloud零基础学习(一)启用以及简单配置
本篇参考: https://trailhead.salesforce.com/en/content/learn/trails/communities https://trailhead.salesfo ...