两次查看网页源代码的结果不一致,如何解决

小白在练习爬取一款商品信息,但是结果有时正常有时错误,print(req.text)后发现结果有两种,不得其解。后在浏览器种右键-查看网页源代码(同一个网页),发现不同的时间也有两种结果;同一时间内,浏览器查看的源代码和print(req.text)的往往也不一样,这是什么原因?怎么确保爬到charset="gbk"的那个?

主要网页截图和代码如下

# 需要调用的requests 库和 BeautifulSoup库中的bs4工具
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import chardet


num = 0  # 定义条数的初始值
# 定义一个变量url,为需要爬取数据我网页网址
url = 'https://detail.1688.com/offer/1256595978.html?spm=a261y.7663282.trade-type-tab.1.7a1e31e31MYdsg&sk=consign'
# 获取这个网页的源代码,存放在req中,{}中为不同浏览器的不同User-Agent属性,针对不同浏览器可以自行百度
ua=UserAgent(use_cache_server=False)
headers = {'User-Agent': ua.chrome}
req = requests.get(url, headers=headers)
print(req)
print(req.status_code)
print(req.url)
print(req.encoding)
print('----------')
#chardet.detect(req.content)
req.encoding='GBK'
print(req.encoding)
print(req.text)
# 生成一个Beautifulsoup对象,用以后边的查找工作
soup = BeautifulSoup(req.text, 'lxml')
#建立列表
xml=[]
# 找到所有p标签中的内容并存放在xml这样一个类似于数组队列的对象中
xml.append(soup.find(class_="chinaname hidden"))
# 利用循环将xml[]中存放的每一条打印出来


print(url)


print("\n旺旺:",xml[0].string)


# for i in range(len(xml)):  # 表示从0到xml的len()长度
#     msg = xml[i].string
#     if msg is not None:
#         num += 1

懂了,在新的浏览器里直接粘贴网址进入会有验证界面,utf-8版本就是验证界面的网页源代码,之所以商品网页也可以刷出utf-8版本也许可能是放置过久,已需要验证。

如图,其实另一份源代码来源于这个界面,只是在一个浏览器里反复访问通常不需要验证码,所以我一直不知道

两个页面 那就写两套代码 两套逻辑呗

分别对应两套网页源码

这种情况只能是判断爬到的不是charset="gbk"的那个就重新再爬一次。


而且,人家设置验证码就是为了反爬虫的。