python爬虫遇到的问题:用request.get请求网页,为什么返回的网页数据不完整?整个html页面中有head和body,只返回了head里面的内容,body里面的内容并没有返回,具体是什么原因导致的,有什么解决办法吗?
这是网页的代码
刚开始以为终端接收有长度限制,于是我就输出到了一个记事本文件里,返回值依然不完整
这个网站是用vue写的,你通过request获取的html内只有<div id="app" />
,而网站内容都是通过后续js加载的。
要解决这个问题,可以使用带虚拟浏览器内核的爬虫框架,渲染这个页面,设置延迟,再进行爬取。
我对Python爬虫只有较浅的认识,如果是要爬取此类网站的数据,我会优先分析其接口调用。
但可保证上述方案是经过实践的。
动态加载的,最简单的是直接上selenium,不然就是请求图中那个连接,并记得把相关header摘下来
【相关推荐】
import requests
url = "https://www.baidu.com/"
response = requests.get(url) # 发送get请求,请求url地址对应的响应
print(response) # 打印响应的状态码。返回<Response [200]>,<XXX> 表示的是对象
# 获取响应内容,获取网页的html字符串
# 方法一
print(response.content) # 返回b'<xxx> 开头的内容,是二进制字节流,中文内容都被编码过了
print(response.content.decode()) # 把响应的二进制字节流转化为str类型
# 方法二
print(response.content.decode("gbk")) # 如果方法一获取的内容含有乱码,则指定解码格式gbk(常用的中文字符集)
# 方法三
response.encoding = "utf-8" # response.text容易出现乱码,故前面添加response.encoding="utf-8"
print(response.text)
以上三种response方法,一般能正确获取到响应的内容
(1)response.content.decode()
(2)response.content.decode("gbk")
(3)response.encoding = "utf-8"
response.text
response的其他方法:
print('response.request.url', response.request.url) # 发送请求的的url地址
print('response.url', response.url) # response响应的url地址
print('response.request.headers', response.request.headers) # 请求头
print('response.headers', response.headers) # 响应头
response = requests.get(url, headers={headers字典})