Python网络爬虫与信息提取Day2

Python网络爬虫与信息提取
一、导学
掌握定向网络数据爬取和网页解析的基本能力
1、Requests库:自动爬取HTML页面,自动向网络提交请求
2、robots.txt:网络爬虫排除标准
3、Beautiful Soup库:解析HTML页面
4、Projects:实战项目A/B
5、Re库:正则表达式详解,提取页面关键信息
6、Scarpy*:网络爬虫原理介绍,专业爬虫框架介绍
二、Python开发工具
文本工具类IDE:IDLE,Sublime Text
集成工具类IDE:PyCharm,Anaconda & Spyder,Wings,Eclipse
三、Requests库入门
1、安装Requests库,打开cmder,输入命令:pip install requests
2、测试一下是否安装成功
打开Python自带的IDLE,输入一下命令
import requests#导入Requests库
r = requests.get("http://www.baidu.com")#连接百度官网
r.status_code#测试是否安装库成功,如果安装成功则状态码会显示200
r.encoding = "utf-8"#打印出百度官网的网页
r.text
3、Requests库的常用方法:request,get,head,post,put,patch,delete
(1)get方法
r = requests.get(url,params=None,**kwargs)
url:拟获取页面的url连接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
另外还有其他常用方法:head(),post(),put(),patch(),delete(),options()
1)Response对象的属性
r.status_code:Http请求的返回状态,200表示连接成功,404表示失败
r.text:Http响应内容的字符串形式,即url对应的页面内容
r.encoding:从HTTP header 中猜测的响应内容编码方式
r.apparent_encoding:从内容中分析出的响应内容编码方式(备选编码方式)
r.content:Http响应内容的二进制形式
2)Requests库的异常
requests.ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPErrot:HTTP错误异常
requests.URLRequired:URL缺失异常
requests.TooManyRedirectsL:超过最大重定向次数,产生重定向异常
requests.ConnectTimeout:连接远程服务器超时异常
requests.Timeout:请求URL超时,产生超时异常
r.raise_for_status():如果不是200,产生异常requests.HTTPErrot
3)爬取网页的通用代码框架:
import requests#导入Requests库
def getHTMLText(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"
if _name_=="__main__":
    url = "http://www.baidu.com"
    print(getHTMLText((url))
4)HTTP协议
URL路径格式:http://host[:port][path]
host:合法的Internet主机域名或IP地址
port;端口号,缺省端口为80
path:请求资源的路径
HTTP协议对资源的操作:GET,HEAD 取资源|发资源 POST,PUT,PATCH,DELETE
(3)request方法
参数:
四、Robots Exclusion Standard 网络爬虫排除标准
1、网络爬虫的限制
(1)来源审查:判断User-agent进行限制
检查来访HTTP协议头的User-agent域,只响应浏览器或友好爬虫的访问
(2)发布公告:Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守
2、robots协议基本语法
User-agent:*
Disallow:/
#注释,*代表所有,/代表根目录
3、 robots协议的作用:告知网络爬虫哪些页面可以抓取,哪些不行
    robots协议的形式:在网站根目录下的robots.txt文件。
    robots协议的使用:网络爬虫自动或人工识别robots.txt,再进行内容爬取。
        Robots协议是建议但非约束性的,网络爬虫可以不遵守,但存在法律风险。类人类行为可不参考Robots协议。

五、Requests库实例
实例1:京东商品页面的爬取
实例2:Amazon商品页面的爬取
实例3:百度、360搜索关键词提交
实例4:网络图片的爬取和存储
实例5:IP地址归属地的自动查询
得出:要以爬虫视角看待网络资源,任何事物都有它自己的URL,通过URL获取它

六、BeautifulSoup库是解析、遍历、维护、"标签树"的功能库。
1、BeautifulSoup的安装:pip install beautifulsoup4


怎么使用BeautifulSoup库呢?
from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>data<p>','html.parser'
把HTML中的标签——》标签树——》BeautifulSoup类
parser解析器
2、bs4库的基本元素
tag标签,name标签的名字,atttributes标签的属性,navigableString标签之间的字符串,comment标签之间注释的字符串
3、bs4库的遍历功能
下行遍历.contents,.children,.descendants
上行遍历:.parent,.parents
平行遍历:.next_sibling,.previous_sibling,.next_siblings,.previous_siblings
4、三种信息标记类型
XML(eXtensible Markup Language):是一种用尖括号<>标记信息的表达形式
JSON(JavaScript Object Notation):是一种用键值对"":""(要有双引号)标记信息的表达形式
YAML(YAML Ain't Markup Language):是一种用无类型标记信息的表达形式
5、信息提取的一般方法
(1)完整解析信息的标记形式,再提取关键信息。eg:bs4库的标签树遍历
(2)无视标记形式,直接搜索关键信息
(3)融合方法:结合形式解析与搜索方法,提取关键信息。
需要标记解析器及文本查找函数
XML:用信息提取的一般方法
JSON:<tag>(...) 等价于 <tag>.find
YAML:soup(...) 等价于 soup.find 
小实例:
提取HTML中所有URL链接
思路:1)搜索到所有<a>标签树    
        2)解析<a>标签格式,提取href后的链接内容
.find_all(name,attrs,recursive,string,**kwargs)
6、中国大学排名实例:
功能描述:
输入:大学排名URL链接
输出:大学排名信息的屏幕输出(排名,大学名称,总分)
技术路线:requests,bs4
定向爬虫:仅对输入URL进行爬取,不扩展爬取。
程序结构设计:
步骤1:从网络上获取大学排名网页内容
    getHTMLText()
步骤2:提取网页内容中信息到合适的数据结构
    fillUnivList()
步骤3:利用数据结构展示输出结果
    printUnivList()

猜你喜欢

转载自blog.csdn.net/qq_32539403/article/details/84305096