python爬⾍:requests+pyquery实现知乎热门话题爬取
⽂章⽬录
前⾔
有些东西想忘都忘不了,⽽有些却转背就忘了!这段时间忙于⼯作和学习mysql,把爬⾍搁置⼀边,今天翻开书发现忘得差不多了,于是想到爬爬知乎热门话题,以此来温习爬⾍的基本知识点。
1. requests库的基本使⽤
1.1 ⽹页获取get和post
前提安装好了requests库,get请求和post请求
#get请求
import requests
r = ('url')
)
#post请求
import requests
data ={'name':'anxiao','age':'23'}
r = requests.post('/post', data=data)
)
1.2 params参数构造url,json()⽅法将返回结果为json格式的⽂本转为字典
import requests
data ={'name':'germy','age':22}
r = ('/get',params=data)
)
print(r.url)
print())
print(r.json())
print(type(r.json()))
1.3 添加headers和cookies
import requests
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'cookie':'''_zap=f298cc22-ed45-47a7-80c5-0c1f60f3207e; d_c0="ALCjXn2C-A-PTj7MOThWA-1TyjHY7_qdZkc=|1567155243"; _ga=GA1.2.1140563 663.1583908405; _xsrf=2e8xkoYwNLLG0bt9CMArPU7UMvI8WifQ; z_c0=Mi4xR1ZYa0RRQUFBQUFBc0tOZWZZTDREeGNBQUFCaEFsVk54UUYzWHdE ZEtWcmk3dk5hdmJRd1VKMy16QkJIb0FkTjd3|1586082757|eead4bcc08f01e07ddcdd636c3d4c26a3e5ffd8d; q_c1=805e9a6adc9846dc82db227b9c60baa 5|1586083219000|1586083219000; __guid=74140564.3769393844892784600.1595129352315.7222; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=15 95129354; _gid=GA1.2.512696011.1595129354;
SESSIONID=3M4KH7g828eAbnCQSLCj70mOeqT9BvhOqnBpbyWwFgY; JOID=W1sSA02TelvBu4dBBZq PRAINum8aqjNojPy6IjquSDqH3-YIUJXHSZe-iUIEtj16n1FxY7wUR01Jm0KKd28XW9o=; osd=V1EXAUqfcF7DvItLAJiISAgIuGgWoDZqi_CwJzipRDCC3eEEW pDFTpu0jEADujd_nVZ9abkWQEFDnkCNe2USWd0=; tst=h; tshl=; monitor_count=9; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1595130975; KLBRS ID=5430ad6ccb1a51f38ac194049bce5dfe|1595131061|1595129347referer: www.zhihu/people/gu-ying-13-66''' }
r = ('url',headers=headers)
1.4 处理⼆进制数据
r = ('github/favicon.ico')
#)
#t)
with open('github.ico','wb')as f:
f.t)
1.5 查看响应数据
import requests
r = ('www.jianshu')
print(r.status_code)#返回状态吗
print(r.headers)#请求头
kies)#cookies
print(r.url)#查看url
1.6 会话维持Session
#⽆法获取⽹页,未建⽴会话
import requests
<('/cookies/set/number/123456789')
r = ('/cookies')
)
#可以获取⽹页,已建⽴会话
import requests
s = requests.Session()
mysql服务无法启动失败
<('/cookies/set/number/123456789')
r = s.get('/cookies')
)
2. pyquery库的基本使⽤制作网页的工具是什么
pyquery库是python的⼀个⽹页解析库,它的强⼤之处在于它的css选择器,基pyquery的css选择器来分析和解析⽹页具有很⾼的效率。
2.1 初始化
investor是什么意思
pyquery的初始化有三种,分别为:字符串初始化,url初始化和⽂件初始化
#字符串初始化
#html = 'html⽂本内容'
html ='''
<div>
<ul>
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">sceond item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fouth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
#url初始化
from pyquery import PyQuery as pq
doc = pq(url='cuiqingcai')
#⽂件初始化
from pyquery import PyQuery as pq
doc = pq('fielname'='⽂件名')
2.2 查节点
⼦节点
find():查⼦节点
children():查⼦孙节点
⽗节点
parent():获取直接⽗节点
parents():获取祖先节点
兄弟节点
siblings():获取兄弟节点
有时候⽤pyquery选择的可能是多个节点,但打印出来的往往是第⼀个节点,这时候就需要⽤到items()⽅法了,使⽤items()⽅法就会得到⼀个⽣成器,再进⾏遍历就可以得到每个节点了,可以如下
html ='''
<div class="wrap">
<div id="container">
<ul class="list">
<li class="item-0">first item</li>
<li class="item-1"><a href="link2.html">sceond item</a></li>
<li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li>
<li class="item-1 active"><a href="link4.html">fouth item</a></li>
<li class="item-0"><a href="link5.html">fifth item</a></li>
</ul>
</div>
</div>
'''
from pyquery import PyQuery as pq
doc = pq(html)
li = doc('li').items()
print(type(li))
for i in li:
print(li)
2.3 获取信息
获取属性
attr():获取节点的属性
mysql面试题 知乎获取⽂本
text():获取节点的⽂本信息
3. 爬取知乎热门话题
3.1 爬取步骤
获取⽹页源码
分析源码,提取需要的信息matlab表示1到100
保存信息
3.2 获取⽹页源码
import requests
from pyquery import PyQuery as pq
def get_page():
零基础学php全彩版#获取⽹页源码
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'cookie':'''_zap=f298cc22-ed45-47a7-80c5-0c1f60f3207e; d_c0="ALCjXn2C-A-PTj7MOThWA-1TyjHY7_qdZkc=|1567155243"; _ga=GA1.2.1140563 663.1583908405; _xsrf=2e8xkoYwNLLG0bt9CMArPU7UMvI8WifQ; z_c0=Mi4xR1ZYa0RRQUFBQUFBc0tOZWZZTDREeGNBQUFCaEFsVk54UUYzWHdE ZEtWcmk3dk5hdmJRd1VKMy16QkJIb0FkTjd3|1586082757|eead4bcc08f01e07ddcdd636c3d4c26a3e5ffd8d; q_c1=805e9a6adc9846dc82db227b9c60baa 5|1586083219000|1586083219000; __guid=74140564.3769393844892784600.1595129352315.7222; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=15 95129354; _gid=GA1.2.512696011.1595129354; SESSIONID=3M4KH7g828eAbnCQSLCj70mOeqT9BvhOqnBpbyWwFgY; JOID=W1sSA02TelvBu4dBBZq PRAINum8aqjNojPy6IjquSDqH3-YIUJXHSZe-iUIEtj16n1FxY7wUR01Jm0KKd28XW9o=; osd=V1EXAUqfcF7DvItLAJiISAgIuGgWoDZqi_CwJzipRDCC3eEEW pDFTpu0jEADujd_nVZ9abkWQEFDnkCNe2USWd0=; tst=h; tshl=; monitor_count=9; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1595130975; KLBRS ID=5430ad6ccb1a51f38ac19
4049bce5dfe|1595131061|1595129347referer: www.zhihu/people/gu-ying-13-66''' }
html = ('www.zhihu/hot', headers=headers)
if html.status_code ==200:
print("⽹页获取成功...")
else:
print("⽹页获取失败...")
值得⼀提的是这⾥必须添加User-Agent,它在这⾥的作⽤是伪造⼀个请求头⾥的User-Aagent,好让服务器响应(来⾃百度:User
Agent中⽂名为⽤户代理,是Http协议中的⼀部分,属于头域的组成部分,User Agent也简称UA。它是⼀个特殊字符串头,是⼀种向访问⽹站提供你所使⽤的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标识,⽤户所访问的⽹站可以显⽰不同的排版从⽽为⽤户提供更好的体验或者进⾏信息统计。)。
其次,这⾥要添加的还有cookie,它的作⽤是保持登录状态;有了User-Agent和cookie,这样就能获取到包含有热门话题信息的源码了,不然是⽆法获取有效源码的。
获取⽅式:登录知乎,切换到热榜下,按F12,然后如下,最后继续复制粘贴就⾏了
调⽤get_page()函数后结果如下
可以看到源码⾥的信息和在浏览器⾥看到的是⼀样的,说明成功获取到了要爬取得源码。
3.3 提取需要的信息

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。