具体代码:
import requests
url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=阿里巴巴'
res = requests.get(url).text
print(res)
获取到的网页源代码:
可以看到没有获取到真正的网页源代码,这是因为百度新闻网站只认可浏览器发送的访问请求,不认可Python发送的访问请求。
解决方案:此时需要通过设置requests.get()函数的参数headers,以模拟浏览器进行访问。
headers = {
"User-Agent":"Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 103.0.5060.114Safari / 537.36Edg / 103.0.1264.62"
}
实现代码:
import requests
url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=阿里巴巴'
headers = {
"User-Agent":"Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 103.0.5060.114Safari / 537.36Edg / 103.0.1264.62"
}
res = requests.get(url,headers=headers).text
print(res)
参数headers用于向网站提供访问者的信息,其中的User-Agent(用户代理)反映了访问者使用的是哪种浏览器
虽然有时不加headers也能获得网页的源代码(如爬取Python官网),但是headers的设置和使用并不麻烦,而且可以避免可能会出现的爬取失败,所以还是建议加上headers。
每次只需要只要记得在爬虫程序的最前面写上如下代码:
headers = {
"User-Agent":"Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 103.0.5060.114Safari / 537.36Edg / 103.0.1264.62"
}
使用requests 库获取的是未经渲染的网页源代码,如果用它来爬取动态渲染的网页,就往往爬取不断我们想要的结果
快速验证网页是否被动态渲染的方法:
要从经过动态渲染的网页中爬取数据的办法:
使用Selenium库获取新浪财经股票信息
import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://finance.sina.com.cn/stock/')
data = browser.page_source # 核心代码
print(data)
time.sleep(1000)
使用下面的代码,就能关闭模拟浏览器
browser.quit()
如果觉得文章不错,可以给我点赞鼓励一下我,欢迎收藏
关注我,我们一起学习,一起进步!!!