1、认识爬虫
爬虫就是spider,网络蜘蛛 爬虫流程步骤:
- 1、确定需求
- 2、寻找需求
- 3、发送请求
- 4、解析数据
- 5、存储数据
2、安装request库
pip3 install requests
3、发送请求
import requests
url='https://www.baidu.com/'
res=requests.get(url=url)
print(res)
print(res.content)
print(res.text)
print(res.content.decode('utf-8'))
print(res.status_code)
print(res.url)
print(res.request.headers)
4、第三方库网站pypi.org
pypi.org
5、User-Agent请求头
'user-agent’用chrome去网页的network里面去查userAgent
import requests
url='https://www.lmonkey.com/'
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}
res=requests.get(url=url,headers=headers)
code=res.status_code
print(code)
if code==200:
with open('./test.html','w',encoding='utf-8') as fp:
fp.write(res.text)
结果: 根目录下生成test.html
6、requests的post请求
import requests
url='https://fanyi.baidu.com/sug'
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}
data={'kw':'你好'}
res=requests.post(url=url,headers=headers,data=data)
code=res.status_code
print(code)
if code==200:
print('请求成功')
data=res.json()
if data['errno']==0:
print('响应成功')
print(data['data'][0]['k'])
value=data['data'][0]['v']
print(value.split(';').pop())
print(res.json())
结果: 200 请求成功 响应成功 你好 How do you do! {‘errno’: 0, ‘data’: [{‘k’: ‘你好’, ‘v’: ‘hello; hi; How do you do!’}, {‘k’: ‘你好吗’, ‘v’: ‘How do you do?’}, {‘k’: ‘你好,陌生人’, ‘v’: ‘[电影]Hello Stranger’}]}
7、requests中携带cookie信息
地址有有问题,报错,不过看headers里添加cookie代码就好
import requests
url='https://lmonkey.com/'
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
'cookie':'UM_distinctid=17c1fbab167af2-013fbad84c2a8f-4343363-1fa400-17c1fbab168b7b; CNZZDATA1277679765=2066258434-1632613844-|1632613844; documentTitle=学习猿地 - IT培训|Java培训|Python培训|ui设计培训|web前端培训|GO培训|PHP培训|成就自己的只需一套精品; documentIcon=https://ccidcdn.wkjc.cn/Fq0R3EQY3U0DdfsdTj-7owTVWsCZ.png; fromPath=; loginWxConfig=1; registerConfig=1; href=https://www.lmonkey.com/; accessId=ad8e1ca0-2091-11ea-af9d-6523a0f144a7; authToken=oUw2sxLAughXiHJhM6jqFeyB78PrM80KLVjjNjmf7bw; qimo_seosource_ad8e1ca0-2091-11ea-af9d-6523a0f144a7=站内; qimo_seokeywords_ad8e1ca0-2091-11ea-af9d-6523a0f144a7=; qimo_xstKeywords_ad8e1ca0-2091-11ea-af9d-6523a0f144a7=; pageViewNum=3; userToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvYXBpLmxtb25rZXkuY29tXC9hcGlcL3dlY2hhdF9sb2dpbl9jaGVjayIsImlhdCI6MTYzMjYyNDU5MiwiZXhwIjo3NjMyNjI0NTMyLCJuYmYiOjE2MzI2MjQ1OTIsImp0aSI6Ilc1dmd6aUFaZE5QQjJmbmgiLCJzdWIiOjc1MTAxLCJwcnYiOiIyM2JkNWM4OTQ5ZjYwMGFkYjM5ZTcwMWM0MDA4NzJkYjdhNTk3NmY3In0.LZ_Muxfgss-aBzbO_CiGp6KQ4EgQ7E-43TQHkW6CA9I'
}
res=requests.get(url=url,headers=headers)
code=res.status_code
print(code)
if code==200:
with open('./test1.html','w',encoding='utf-8') as fp:
fp.write(res.text)
8、requests库中的session方法
requests.session()
9、安装Xpath
pip install lxml 使用xpath模块 from lxml import etree
关于在windows版本pycharm的pip最新版本使用的问题
10、Xpath解析html
xpath其实就是解析路径,有点像bom。类似jquery。获取html的节点及操作html节点
- 1、第一种方式,直接在python代码中解析html字符串
from lxml import etree
text='''
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>这是我的标题</title>
</head>
<body>
<div class="grandfather">
<div class="father">
<div class="son">
<ul>
<li>这是我的第一条新闻</li>
<li>这是我的第二条新闻</li>
<li>这是我的第三条新闻</li>
</ul>
</div>
<div class="anotherson">
<ol>
<li>还是你的第一条资讯</li>
<li>还是你的第二条资讯</li>
<li>还是你的第三条资讯</li>
</ol>
</div>
<div class="oneson">
<ul>
<li><a href="http://www.baidu.com">我的第一条链接</a></li>
<li><a href="http://www.sina.com.cn">我的第二条链接</a></li>
<li><a href="http://www.sohu.com">我的第三条链接</a></li>
</ul>
</div>
</div>
</div>
<ul>
<li>每条资讯都是独一无二的</li>
<li>这条资讯不会觉得似曾相识</li>
<li>条条资讯未必都能通向知识大门</li>
</ul>
</body>
'''
html=etree.HTML(text)
res=html.xpath('/html/body/ul/li/text()')
print(res)
res=html.xpath('/html/body/div/div/div/ul/li[1]/a/text()')
print(res)
- 2、第二种方式,读取一个html文件并解析
根目录下创建myhtml.html
from lxml import etree
html=etree.parse('./myhtml.html',etree.HTMLParser())
print(html)
res=html.xpath('/html/body/ul/li/text()')
print(res)
11、Xpath常用规则
from lxml import etree
html=etree.parse('./myhtml.html',etree.HTMLParser())
print(html)
res=html.xpath('//li/text()')
print(res)
- 2、获取指定标签的数据
使用标签名[@class=“类名”]来获取标签 使用@属性名来获取标签的属性
html=etree.HTML(text)
print(html)
res=html.xpath('//div[@class="son"]/ul/li/text()')
print(res)
res=html.xpath('//div[@class="oneson"]/ul/li/a/@href')
print(res)
from lxml import etree
text='''
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>这是我的标题</title>
</head>
<body>
<div class="grandfather">
<div class="father">
<div class="son">
<ul>
<li>这是我的第一条新闻</li>
<li>这是我的第二条新闻</li>
<li>这是我的第三条新闻</li>
</ul>
</div>
<div class="anotherson info">
<ol>
<li><a href="http://www.csdn.com">还是你的第一条资讯</li>
<li><a href="http://www.tencent.com">还是你的第二条资讯</li>
<li>还是你的第三条资讯</li>
</ol>
</div>
<div class="oneson">
<ul>
<li><a href="http://www.baidu.com">我的第一条链接</a></li>
<li><a href="http://www.sina.com.cn">我的第二条链接</a></li>
<li><a href="http://www.sohu.com">我的第三条链接</a></li>
</ul>
</div>
</div>
</div>
<ul>
<li>每条资讯都是独一无二的</li>
<li>这条资讯不会觉得似曾相识</li>
<li>条条资讯未必都能通向知识大门</li>
</ul>
</body>
'''
html=etree.HTML(text)
print(html)
res=html.xpath('//div[contains(@class,"info")]/ol/li/a/@href')
print(res)
from lxml import etree
text='''
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>这是我的标题</title>
</head>
<body>
<div class="grandfather">
<div class="father">
<div class="son">
<ul>
<li>这是我的第一条新闻</li>
<li>这是我的第二条新闻</li>
<li>这是我的第三条新闻</li>
</ul>
</div>
<div class="anotherson info">
<ol>
<li><a href="http://www.csdn.com">还是你的第一条资讯</li>
<li><a href="http://www.tencent.com">还是你的第二条资讯</li>
<li>还是你的第三条资讯</li>
</ol>
</div>
<div class="oneson">
<ul>
<li><a href="http://www.baidu.com">我的第一条链接</a></li>
<li><a href="http://www.sina.com.cn">我的第二条链接</a></li>
<li><a href="http://www.sohu.com">我的第三条链接</a></li>
</ul>
</div>
</div>
</div>
<ul>
<li>每条资讯都是独一无二的</li>
<li>这条资讯不会觉得似曾相识</li>
<li>条条资讯未必都能通向知识大门</li>
</ul>
</body>
'''
html=etree.HTML(text)
print(html)
res=html.xpath('//li[1]/text()')
print(res)
res=html.xpath('//li[last()]/text()')
print(res)
res=html.xpath('//li[position()<3]/text()')
print(res)
res=html.xpath('//li[last()-1]/text()')
print(res)
|