前言:
爬虫是信息和数据获取的一种手段,写此文一方面梳理一下自己学习知识的思路,如果再能帮到一些人就更好了。
-
爬虫步骤
爬虫的步骤一般类似,步骤如下:
-
1.请求网页得到源代码
-
2.对源码进行解析
-
3.获得自己想要的信息
-
4.保存
-
内容
通过爬虫步骤,本文主内容如下
-
requests库(用于请求网页)
-
html网页简单分析
-
bs4 and lxml对网页进行解析
个人感觉lxml比bs4简洁一些
-
请求网页(requests库)
*基本请求get 或 post
'''#<Response [200]>表示正常访问
cookies参数
post请求,参数为data
'''
import requests
r = requests.get("https://www.jianshu.com/")
print(r)
#查看状态码
print(r.status_code)
#查看编码
print(r.encoding)
#cookies
print(r.cookies)
模拟登陆
使用get传递参数,params={};headers={};
headers参数,模拟登陆
parm = {"name":"meimei","age":18}
head ={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 "}
re = requests.get("https://httpbin.org/get",params=parm,headers=head)
print(re.text)
例子:下载音乐
r = requests.get("http://zhangmenshiting.qianqian.com/data2/music/c834308c5e8935a67ac9d2000eed1d64/554927014/554927014.mp3?xcode=6fb9f3c231e1399d48ae5c20176c0886",stream=True)
# print(r.content)
with open("1.mp3","wb") as file:
for i in r.iter_content(1024*10):#每次写的大小
file.write(i)
- cookies参数 和 session会话
当你访问有登陆网站的服务器之后,服务器会建立一个session同时返回给你相对应的cookies参数,你再次访问就不需要再次输入密码了
s= requests.session()#开启session会话,后面加上update(head)
head ={'cookies':'one',"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 "}
r = s.get("https://httpbin.org/get",headers=head)
print(r.text)
s.headers.update(head)
r = s.get("https://httpbin.org/get",headers={"cooke":"two"})
print(r.text)
第二次访问继承了第一次访问的cookies
-
html页面
一张图就ok了
image.png
-
解析网页
bs4后面用一个例子介绍,这里介绍更简单的lxml
- lxml
注意,下载lxml模块3.7.3版本
解析前面获取的源码,代码如下
from lxml import etree
import requests
url = "https://www.cnblogs.com/"
head ={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'
}
r = requests.get(url,head).content.decode("utf-8")
#解析
html = etree.HTML(r)
- 数据获取,用xpath选取节点
选取节点
dom = html.xpath("/html/body/div")#从根节点开始,以列表形式返回
print(dom)
dom = html.xpath("//a")#返回文档中所有的a标签
print(dom)
dom = html.xpath("//@*")#返回所有属性
print(dom)
or的用法
dom = html.xpath("//*[@class='one']")
dom1 = html.xpath("//*[@class='one' or @class='two']")
print(dom)
print(dom1)
获取文本 获取属性值
#获取文本
dom = html.xpath("//*[@class='one']/text()")#获取list
dom1 = html.xpath("string(//*[@class='one'])")#获取节点里面所有的内容
print(dom)
print(dom1)
#获取属性
dom3 = html.xpath("//*[@class='one']/@href")
print(dom3)
爬虫篇(4)——qq音乐爬取
爬虫篇(3)——招聘网站招聘信息的爬取
爬虫篇(2)——爬取博客内容
爬虫篇(1)——从爬取练习题开始
网友评论