之前一直想开始学习python网络爬虫的方法,今天决定就开始着手开始学习一下,先从基本的一些开始学习。
参考地址:https://mp.weixin.qq.com/s/ApnEy6NWS2f-DqIIrhHzGw
爬虫程序一般是通过模拟浏览器对相应URL发出请求,获取数据,并通过正则等手段匹配出页面中我们所需的数据。Requests 是学习爬虫的一大利器。是一个优雅简单的 HTTP库。
requests.get()用于请求目标网站,类型是一个HTTPresponse类型
import requests
response = requests.get('http://www.baidu.com')
print(response.status_code) # 打印状态码,状态码为200表示请求成功
print(response.url) # 打印请求url
print(response.headers) # 打印头信息
print(response.cookies) # 打印cookie信息
print(response.text) #以文本形式打印网页源码
print(response.content) #以字节流形式打印
1、基本的get请求
import requests
response = requests.get('http://httpbin.org/get')
print(response.text)
结果:
2、解析json
response=requests.get('http://httpbin.org/get')
print(response.text)
print(response.json())
print(type(response.json()))
结果:
拿到网页信息后,我们要解析页面,通常来说我们有以下几种方式来解析页面,获取我们所需的信息。
- 正则表达式
- Lxml
- Beautiful Soup
Beautiful Soup是一个python的实现解析库,语法会比前面两种方法简单,不过运行速度会比前面两种慢很多,特别是数据量非常大的时候,不过由于是新入手的小白,就先学习Beautiful Soup,学习一下匹配页面所需元素的方法。
下面是bs4的一些基础知识:
将一段文档传入BeautifulSoup的构造方法,就能得到一个文档的对象。
bs = BeautifulSoup(open('index.html',encoding='utf-8'),'lxml')
print(bs)
#我这里用这个打开报错: 'utf-8' codec can't decode byte 0xa1 in position 63: invalid start byte
#把encoding='utf-8'去掉就可以了
注意:这样上传文档的话,BeautifulSoup里面需要两个参数。一个为open方法,一个是固定写法,也就是解析器,open方法里面也同样需要两个参数,一个是想要解析的数据,另一个为设置编码的格式。
(1)获取网页中的title标签
print(bs.title)
(2)获取head标签及标签内部的所有其他标签
print(bs.head)
(3)获取当中的第一个a标签
print(bs.a)
注意:获取文档当中所有的xx当中第一个xx或者第一个xx里面的内容。都可以用bs.xx来获取
(4)获取指定标签的所有属性
print(bs.a.attrs)
(5)获取标签的属性
print(bs.a['href'])
(6)获取标签的文本内容。
print(bs.a.string)
注意:string获取的文本指的是本标签的文本,不包含子标签的文本
(7)contents能够获取指定标签下面的所有内容。
print(bs.body.contents)
(8)获取所有内容当中指定索引的内容
print(bs.div.contents[3])
(9)通过id和类名来找标签
print(bs.find(id='kw')) print(bs.find(class_='shopping'))
注意:id是唯一的,通过id来找,只能找到一个,所以用find,而class不是唯一的,通过class来找,就有可能找到多个。
(10)select选择指定的标签
print(bs.select('title')) print(bs.select('a'))
在bs4中,小数点“.”表示类名,#表示id
print(bs.select('.first')) print(bs.select('#kw')) print(bs.select('div.now'))
下面是一个加载本地html的例子:
html文档
<!doctype>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Page Title</title>
</head>
<body>
<h1>这是我的第一个标题</h1>
<p>我的第一个段落</p>
<div class='main-page'>
<ul class='menu-list'>
<li>首页</li>
<li>新闻</li>
<li>影视</li>
</ul>
</div>
</body>
</html>
通过 Beautiful Soup 来加载这个html
from bs4 import BeautifulSoup
bs = BeautifulSoup(open('F:/crawler/example.html','r'), 'lxml')
#print(bs)
#find()查找第一个匹配结果出现的地方,find_all()找到所有匹配结果出现的地方
# print(bs.find('div')) # 找到 div 标签
li=bs.find_all('li') # 找到所有 li 标签
for i in li:
print(i)
下面是结合起来的一个简单例子:
import requests
from bs4 import BeautifulSoup
url = 'http://fund.eastmoney.com/340007.html?spm=search'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
r = requests.get(url,headers=headers)
html=r.text
soup = BeautifulSoup(html, 'html.parser')
上面是两个库的一点基本的基础知识,要学习的还有很多,后续会继续学习补充。
网友评论