这里写自定义目录标题
爬虫实战01-urllib
获取url
如拉勾网,进入拉勾网,右键-检查
# 2021-2-25
from urllib import request,parse
url='https://www.lagou.com/jobs/list_python?&cl=false&fromSearch=true&labelWords=&suginput='
resp=request.urlopen(url)
print(resp.read( ))
结果:
虽然没有报错,但是返回的结果并不是真实正确的数据。
原因:拉勾网的发爬虫机制发现了爬虫操作,拒绝返回真实数据,返回了一堆乱七八糟。
解决方法:
添加请求头,使得拉勾网无法判断是否是爬虫
首先添加 User-Agent:
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36}',}
req=request.Request(url,headers=headers)
resp=request.urlopen(req)
print(resp.read( ))
好像还是不对
Request:
拉勾网首页的url 里并不包含职位信息,职位信息存在于:
重新对该url 进行爬虫,并添加data 数据
url='https://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36}'}
data={
'first': 'true',
'pn': 1,
'kd': 'python'
}
req=request.Request(url,headers=headers,data=data)
resp=request.urlopen(req)
print(resp.read( ))
解决:
req=request.Request(url,headers=headers,data=parse.urlencode(data).encode('utf-8'),method='POST') # UNICODE变成BYTES:。encode('utf-8)
结果为b bytes,需要对其进行解码
print(resp.read( ).decode('utf-8'))
实际并非是“操作太频繁”,如果真的是因为操作太频繁,网页端也不可刷新,然而并不是。
说明结果信息是误导信息,请求被识别出是爬虫了,需要再进行伪造。 增加请求头,使得更真。
添加了几个headers 还是 “操作太频繁”
https://blog.csdn.net/weixin_40576010/article/details/88336980
后续继续