第三章 使用urlib爬取北京公交线路

名词解释: 

1.1网络爬虫概述

网络爬虫,即web spider。网络蜘蛛是通过网页链接的地址来寻找网页。

第三章 使用urlib爬取北京公交线路_第1张图片

 1.2 超文本和html

一个典型的HTTP请求过程如下:    

(1)用户在浏览器中输入网址,比如http://dblab.xmu.edu.cn,浏览器向网页服务器发起请求;     (2)网页服务器接收用户访问请求,处理请求,产生响应(即把处理结果以HTML形式返回给浏览器)     

(3)浏览器接收来自网页服务器的HTML内容,进行渲染以后展示给用户。

第三章 使用urlib爬取北京公交线路_第2张图片

 1.3 网络爬虫的原理

爬虫就是发送请求获取网站内容并从中提取数据的自动化程序。其中请求,提取,自动化是爬虫的关键,网络爬虫的基本流程如图:

第三章 使用urlib爬取北京公交线路_第3张图片

 程序填空题

2.1 PYTHON实现HTTP网络请求

python实现http网络请求的常见三种三种方式:urllib,urllib3和requests库

1.urllib是python中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。

在Python3的urllib库中,所有和网络请求相关的方法,都被集中到urllib.request模块下

(1)urlopen函数

urllib.request.urlopen()函数用于实现对目标url的访问。

urllib.request.urlopen(url,data=None,[timeout,]*,

cafile=None, capath=None, cadefault=False,context=None)

url 参数:目标资源在网路中的位置。可以是一个表示URL的字符串(如:http://www.pythontab.com/)。

data参数:data用来指明发往服务器请求中的额外的参数信息(如:在线翻译,在线答题等提交的内容),data默认是None,此时以GET方式发送请求;当用户给出data参数的时候,改为POST方式发送请求。

timeout:设置网站的访问超时时间

cafile、capath、cadefault 参数:用于实现可信任的CA证书的HTTP请求。(基本上很少用)

context参数:实现SSL加密传输。(基本上很少用)
 

(2)返回处理方法详解

urlopen返回对象提供方法:

1)read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作

2)info():返回HTTPMessage对象,表示远程服务器返回的头信息

3)getcode():返回Http状态码。如果是http请求,200代码表示请求成功完成;404代码表示网址未找到。

4)geturl():返回请求的url

【例】利用urllib通过urlopen方式读取百度首页。

#导入模块

from urllib import request

#打开指定需要爬取的网页 

resp = request.urlopen('http://www.baidu.com')

#读取网页代码,并输出

print(resp.read())

有些网络爬虫的请求可能因为网络原因无法得到响应。因此,我们可以手动设置超时时间。当请求超时后,可以采取进一步措施,例如选择直接丢弃该请求或者再重新请求一次。

第三章 使用urlib爬取北京公交线路_第4张图片

2.2传递参数

(1)传递URL参数

import urllib.request

import urllib.pa

params = urllib.parse.urlencode({'q': 'urllib', 'check_keywords': 'yes', 'area': 'default'})

url = "HTTP://docs.python.org/3/search.html?{}".format(params)

r = urllib.request.urlopen(url)

print(r.read()) 

第三章 使用urlib爬取北京公交线路_第5张图片

(2)传递中文参数

 第三章 使用urlib爬取北京公交线路_第6张图片

2.3  请求headers处理

出现403错误,是因为部分网站设置了反爬虫设置,可以通过模拟浏览器的头部信息来进行访问。

第三章 使用urlib爬取北京公交线路_第7张图片

  2.4 传递POST请求

第三章 使用urlib爬取北京公交线路_第8张图片

 3.1 HTML解析之Beautifulsoup

BeautifulSoup是—个用于从HTML和XML文件中提取数据的Python库。BeautifulSoup提供一些简单的、函数用来处理导航、搜索、修改分析树等功能。

1.Beautifulsoup的使用

(1)导入bs4库,然后创建一个模拟html代码的字符串

第三章 使用urlib爬取北京公交线路_第9张图片

第三章 使用urlib爬取北京公交线路_第10张图片

3.2 四大对象种类

Beautifulsoup将复杂的HTML文档转换成了一个复杂的树形结构,每个节点都是一个python对象,,所有对象可以归纳为四种:Tag,NavigableString,BeautifulSoup,Comment。Tag就是html的一个个标签。

3.2.1 Tag对象

hello hadoop

test1

代码的注释部分即为运行成果:

第三章 使用urlib爬取北京公交线路_第11张图片

soup.a       soup,p重点理解记忆

可以利用soup加标签名轻松获取这些标签的内容

下面哪里验证一下这些标签的内容

print type(soup.a)

#

对于Tag,他有两个重要的属性attrs和name

print soup.nameprint soup.head.name

#[document]#head

在这里,把p标签的所有属性打印输出了出来,得到的类型是一个字典。

 如果想要单独获取某个属性,可以这样来做,例如获取它的 class。

 

还可以使用get方法传入属性的名称来获取

 还可以对属性内容进行修改

 

3.2.2  NavigableString对象

 不仅可以得到标签的内容,而且还可以通过“.string”获取标签内部的文字。

 这样就轻松获取到了标签里面的内容,下面来检查一下它的类型。

 3.2.3 Beautifulsoup对象

BeautifulSoup对象表示的是一个文档的全部内容,大部分时候,可以把它当作一个特殊的Tag对象,可以分别获取它的类型,名称和属性。

第三章 使用urlib爬取北京公交线路_第12张图片

 3.2.4 comment 对象

Comment对象是一个特殊类型的NavigableString对象,其实输出的内容仍然不包括注释符号,但是如果不好好处理它,可能会对文本处理造成意想不到的麻烦。下面来查找一个带注释的标签。

node:

print soup.a

print soup.a.string

print type(soup.a.string)

running result:

 

你可能感兴趣的:(数据采集与预处理,爬虫)