爬虫百度百科要求验证,请问该如何处理?
爬虫要求验证,请问该如何处理?请赐教,不胜感激。
import urllib.requestimport urllib.parse
from lxml import etree
import re
url = 'https://bke.bd.com/item/' + urllib.parse.quote('周杰伦')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
req = urllib.request.Request(url=url, headers=headers, method='GET')
response = urllib.request.urlopen(req)
text = response.read().decode('utf-8')
print(text)
html = etree.HTML(text)
lt=[]
for i in range(1,6):
sen_list = html.xpath(f"/html/body/div[3]/div[2]/div/div[1]/div[4]/div[{i}]//text()")
l = [item.strip('\n') for item in sen_list]
l=''.join(l)
l=re.sub("\[+\d+\]","",l)
lt.append(l)
for i in range(len(lt)):
print(lt[i])
这种情况用梯子换ip能解决问题吗
回答:
明显是特征被识别到了,换IP肯定是不能的,使用代理有可能够解决。模拟浏览器访问会好一些。
回答:
咋还没解决 ? 之前回复过应该是 TLS 特征被识别,还以为应该知道怎么解决了
pip install aiohttp
代码是你之前问题的代码改的
import urllib.parseimport asyncio
import aiohttp
from lxml import etree
async def query(content):
# 请求地址
url = 'https://baike.baidu.com/item/' + urllib.parse.quote(content)
# 请求头部
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
async with aiohttp.ClientSession(headers=headers) as session:
async with session.get(url) as response:
text = await response.text()
# 构造 _Element 对象
html = etree.HTML(text)
# 使用 xpath 匹配数据,得到匹配字符串列表
sen_list = html.xpath('//div[contains(@class,"lemma-summary") or contains(@class,"lemmaWgt-lemmaSummary")]//text()')
# 过滤数据,去掉空白
sen_list_after_filter = [item.strip('\n') for item in sen_list]
# 将字符串列表连成字符串并返回
return ''.join(sen_list_after_filter)
async def main():
while (True):
content = input('查询词语:')
result = await query(content)
print("查询结果:%s" % result)
if __name__ == '__main__':
asyncio.run(main())
原理就是 urllib.request
库对于 https
请求即 TLS
特征被识别
只需要换个不依赖 urllib.request
实现的请求库如 aiohttp
可参考
- SSL 指纹识别和绕过
以上是 爬虫百度百科要求验证,请问该如何处理? 的全部内容, 来源链接: utcz.com/p/938724.html