前言
前几天爬的今天整理了一下发现就两个需要注意的点
一是记得用带cookie的方式去访问,也就是实例化requests.session()
二是转化一下爬取到的url,访问爬到的url得到返回的Location值,该值便是真实的地址(如果你不是要爬url当我没说)
知道了这两点可以直接先去尝试一下,并没有想象的那么难,爬不出来再看代码
正文
不带cookie访问,直接用requests.get()访问,可以看到只能成功访问一次。其他的虽然状态码是200但应该是触发了反爬机制返回了其他页面给你
带cookie访问,基本上都成功了
转化一下得到的url,得到最终的url
最终代码
import requests
from bs4 import BeautifulSoup
import time
#将百度的url转成真实的url
def convert_url(url):
resp = requests.get(url=url,
headers=headers,
allow_redirects=False
)
return resp.headers['Location']
#获取url
def get_url(wd):
s = requests.session()
#10为第2页,20为第三页,30为第四页,以此类推
for i in range(10, 600, 10):
url = 'https://www.baidu.com/s'
params = {
"wd": wd,
"pn": i,
}
r = s.get(url=url, headers=headers, params=params)
print(r.status_code)
soup = BeautifulSoup(r.text, 'lxml')
for so in soup.select('#content_left .t a'):
g_url = so.get('href')
print(convert_url(g_url))
time.sleep(1 + (i / 10))
if __name__ == '__main__':
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0",
"Host": "www.baidu.com",
}
wd = input("输入搜索关键字:")
get_url(wd)