小白在练习爬取一款商品信息,但是结果有时正常有时错误,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"的那个就重新再爬一次。
而且,人家设置验证码就是为了反爬虫的。