AI网络爬虫:搜狗图片的时间戳反爬虫应对策略

AI网络爬虫:搜狗图片的时间戳反爬虫应对策略如何批量爬取下载搜狗图片搜索结果页面的图片?以孙允珠这个关键词的搜索结果为例:
https://pic.sogou.com/pics?query%E5%AD%99%E

如何从搜狗图片搜索结果页面批量抓取和下载图片?以关键字“孙云珠”的搜索结果为例。

https://pic.sogou.com/pics?query=%E5%AD%99%E5%85%81%E7%8F%A0mode=2

翻页规则如下:

https://pic.sogou.com/napi/pc/searchList?mode=2start=384xml_len=48query=%E5%AD%99%E5%85%81%E7%8F%A0channel=pc_pic

https://pic.sogou.com/napi/pc/searchList?mode=2start=336xml_len=48query=%E5%AD%99%E5%85%81%E7%8F%A0channel=pc_pic

https://pic.sogou.com/napi/pc/searchList?mode=2start=288xml_len=48query=%E5%AD%99%E5%85%81%E7%8F%A0channel=pc_pic

这三个URL都指向同一个服务,即搜狗的图片搜索API,用于检索与孙云竹相关的图片搜索结果。它们之间的规则主要体现在查询参数`start`和`xml_len`上。

**start**参数:该参数控制搜索结果的起始位置。对于第一个URL,“start”的值为384,第二个URL 的“start”值为336,第三个URL 的“start”值为288。这意味着每个请求的搜索结果都是在前一个请求的结果之后检索的。例如,如果每页显示48 个图像(由“xml_len”参数确定),则第一个URL 从第8 页开始(384/48=8),第二个URL 从第7 页开始(336/48)。=7),第三个URL 从第6 页开始(288/48=6)。 **xml_len** 参数:该参数指定每次请求返回的图像数量。它的值为48。这意味着每个请求返回48 张图像。 **query**参数:该参数指定搜索关键字。这里是“孙云珠”。这意味着搜索与孙云珠相关的图像。 **channel**参数:该参数指定请求通道。这里,“pc_pic”表示这是PC端的图像搜索请求。

总结一下规则: 这三个URL 实现分页功能,通过调整“start”参数的值来检索搜索结果。每个请求都从上一个请求的下一页开始检索图像,每次会生成48 张图像。这种设计允许用户或应用程序逐步加载更多搜索结果,而不是一次加载所有结果,从而优化数据加载效率和用户体验。

返回的是json数据。

{

‘状态’: 0,

\’信息\’: \’好的\’,

\’数据\’: {

\’adPic\’: [

{

\’docId\’: \’e154002750821088-37dc5468319bfb35-9215f4c834c26f0856ee7b118f22b559\’,

‘索引’: 0,

\’mfid\’: \’128a42e5ea3535cd\’,

\’拇指高度\’ : 1043,

\’拇指宽度\’: 500

},

{

\’docId\’: \’abe1eea3ca79fc28-c577ebdcb0f3dbcc-a5f4cbbb2bfe711fad33ce48dce150b3\’,

\’索引\’: 1,

\’mfid\’: \’46ff91955836d2f8\’,

\’拇指高度\’ : 767,

‘拇指宽度’: 499

},

{

\’docId\’: \’c286ca7ecc6f7a79-20248c558009c911-5d0f8afe47cd75de9dcce97d6d0e92d4\’,

\’索引\’: 2,

\’mfid\’: \’99a6652c227b8833\’,

\’拇指高度\’ : 768,

\’拇指宽度\’: 500

}

],

\’黑色级别\’: 5,

\’cacheDocNum\’: 48,

\’有PicsetRes\’: 0,

\’isQcResult\’: \’0\’,

\’is_strong_style\’: 1,

“项目”: [

{

\’锚1\’:\’\’,

\’锚2\’:[],

\’anchor_extend\’: {},

\’作者\’: \’http://pic.sogou.com\’,

\’作者姓名\’:\’\’,

\’author_pageurl\’:\’\’,

\’author_picurl\’:\’\’,

\’author_thumbUrl\’: \’https://i02piccdn.sogoucdn.com/0000000000000000_author\’,

\’author_thumb_mfid\’: \’0000000000000000\’,

《美女》: 7、

\’生物素\’: 0,

\’ch_site_name\’: \’搜狐网\’,

“清晰度”: 5,

\’content_major\’: \’裙子部分采用直筒设计,简单的直线裙线与裙子内侧的短设计相结合,打造出趋于简洁、谦虚的裙子风格。另外,延伸至膝盖的裙尾遮盖了大部分腿部线条,浅棕色的运用营造出传统优雅的氛围。 服装外部采用以腰部为中心的对角X 形织物系统。

\’cutBoardInputSkin\’: \’c24c00231bcf459d|11|1718942349116|99418a699300bedc52a7df9b832a7aa0|http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F 2 00212%2Fab9b05decd8d4b4eb39bb287cf0c14ad.jpeg\’,

\’docId\’: \’abe1eea3ca79fc28-c577ebdcb0f3dbcc-4b0aa372e8378eaa63bf649210d0bfc4\’,

\’docidx\’: 96,

\’gifpic\’: 0,

‘团体选’: 1,

‘身高’: 991,

\’https_convert\’: 0,

‘索引’: 0,

\’最后修改\’: \’1581484601\’,

\’like_num\’: \’0\’,

\’链接\’: \’http://pic.sogou.com/d?query=%CB%EF%D4%CA%D6%E9mode=2mood=0did=97dm=0id=abe1eea3ca79fc28-c577ebdcb0f3dbcc-4b0aa372e8378eaa63bf649210d0bfc4\’,

\’locImageLink\’: \’https://i02piccdn.sogoucdn.com/cf2dc47f12f2d0e9\’,

\’mf_id\’: \’cf2dc47f12f2d0e9\’,

\’心情\’: \’0x80\’,

\’名称\’: \’ab9b05decd8d4b4eb39bb287cf0c14ad.jpeg\’,

\’oriPicUrl\’: \’http://5b0988e595225.cdn.sohucs.com/images/20200212/ab9b05decd8d4b4eb39bb287cf0c14ad.jpeg\’,

\’painter_year\’: \’\’,

\’picUrl\’: \’http://5b0988e595225.cdn.sohucs.com/images/20200212/ab9b05decd8d4b4eb39bb287cf0c14ad.jpeg\’,

\’pic_norm_score\’: 0.998463,

\’pic_porn_score\’: 0.000002,

\’pic_sexy_score\’: 0.001535,

\’pic_vulgar_score\’: 0,

\’发布时间\’: \’1581448740\’,

\’发布修改\’:\’\’,

\’排名\’: -100.9800033569336,

‘尺寸’: 118807,

\’summarytype\’: \’普通摘要\’,

\’拇指高度\’ : 569,

\’thumbUrl\’: \’https://i02piccdn.sogoucdn.com/cf2dc47f12f2d0e9\’,

\’拇指宽度\’: 499,

\’title\’:“欣赏孙韵珠浅色百褶修身连衣裙”,

\’类型\’: \’.jpeg\’,

\’url\’: \’https://www.sohu.com/a/372330552_100198733\’,

\’wapLink\’: \’https://pic.sogou.com/pic/download.jsp?v=5eid=1951keyword=%E5%AD%99%E5%85%81%E7%8F%A0index=97groupIndex=96xurl=https://i02piccdn.sogoucdn。 com/cf2dc47f12f2d0e9durl=http%3A%2F%2F5b0988e595225.cdn.sohucs.com%2Fimages%2F20200212%2Fab9b05decd8d4b4eb39bb287cf0c14ad.jpeg\’,

\’water_mark_confidence\’: 0.78199702501297,

“宽度”: 870,

“我做到了”: 97,

‘规模’: 0.8769771528998243,

\’imgTag\’:\’\’,

\’bgColor\’: \’#e3ddf6\’,

\’imgDefaultUrl\’: \’/d?query=%E5%AD%99%E5%85%81%E7%8F%A0forbidqc=entityid=preQuery=rawQuery=queryList=st=channel=pc_picmode=2did=97\’

},

图像下载地址包含在“picUrl”键的值中。

然而,创建爬虫程序后,却无法爬取json数据。如果仔细查看请求标头,您会发现已添加时间戳。

X-Time4p 是一个自定义HTTP 标头字段,通常用于传达与时间相关的信息。在这种情况下,它可能用于在服务器处理请求时传递时间戳。不同的X-Time4p值代表服务器处理不同请求的时间对应的不同时间戳。

例如,X-Time4p: 1718942347427 和X-Time4p: 1718945416096 之间的区别在于它们代表两个不同的时间点:

1718942347427 对应于服务器处理第一个请求的时间。

1718945416096 对应于服务器处理第二个请求所花费的时间。

两个时间戳之间的差异(大约3068677 秒)表示服务器处理两个请求之间经过的时间量。在Python 脚本中,您必须设置X-Time4p 值以及请求标头中的其他字段,以模拟真实的浏览器请求。我需要模拟不同时间点的请求,因此我需要为每个请求使用不同的时间戳。否则,服务器可能需要识别不同的时间戳以便正确处理请求。

要在Python中生成时间戳,可以使用内置时间模块的time()函数。此函数返回自1970 年1 月1 日00:00:00 (UTC) 以来的秒数。这是常见的时间戳格式。

如果您想生成类似于X-Time4p 使用的特定时间戳,您可以使用time.time() 函数并调整返回值以满足您的需要。例如,如果要生成与特定时间戳类似的时间戳,则可以添加或减去特定的秒数。

\’X-Time4p\’: str(int(time.time() * 1000)) # 生成当前时间的时间戳(以毫秒为单位)

在ChatGPT中输入提示词。

您是Python 编程专家。创建一个Python 脚本来抓取网络图像。

请求网址:

https://pic.sogou.com/napi/pc/searchList?mode=2start={pagenumer}xml_len=48query=%E5%AD%99%E5%85%81%E7%8F%A0channel=pc_pic

{pagenumer}值从48开始,增加48,到1008结束。

请求方式:

获得

状态码:

200 好

远程地址:

61.151.229.174:443

推荐人政策:

非推荐人

请求头

接受:

应用程序/json,文本/纯文本,*/*

接受编码:

gzip、deflate、br、zstd

接受语言:

zh-CN,zh;q=0.9,en;q=0.8

连接:

活着

主机:

http://pic.sogou.com

Sec-Ch-Ua:

\’非/A)品牌\’;v=\’8\’, \’Chromium\’;v=\’126\’, \’Google Chrome\’;v=\’126\’

Sec-Ch-Ua-Mobile:

?0

Sec-Ch-Ua-平台:

\’视窗\’

Sec-Fetch-Dest:

空的

秒获取模式:

科西嘉岛

Sec-Fetch-Site:

同源

用户代理:

Mozilla/5.0(Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML、Gecko 等) Chrome/126.0.0.0 Safari/537.36

X-Time4p:{这次}

{thistime} 是时间戳,例如1718945416096。使用str(int(time.time() * 1000)) 生成当前时间的时间戳(以毫秒为单位)。

请求响应是一层嵌套的json数据,输出到屏幕上。

将JSON 字符串解析为Python 字典。首先,获取“data”键对应的子词典,然后访问子词典中的“items”键。 “items”键对应的值是一个列表。获取所有列表中key对应的值“picUrl”。这是图像的URL,将该URL 写入Excel 表格的第一列,并将Excel 表格文件保存在文件夹“C:\\Users\\”中。 dell\\图片\\孙云珠\’

注意:每次请求网页时,网页会随机暂停3 至6 秒。

每一步将信息输出到屏幕

源代码:

导入请求

导入json

导入时间

随机导入

从openpyxl 导入工作簿

#设置请求头信息

标题={

\’接受\’: \’application/json,text/plain,*/*\’,

\’接受编码\’: \’gzip、deflate、br、zstd\’,

\’接受语言\’: \’zh-CN,zh;q=0.9,en;q=0.8\’,

\’连接\’: \’保持活动\’,

\’主机\’: \’http://pic.sogou.com\’,

\’Sec-Ch-Ua\’: \’非/A)品牌\’;v=\’8\’, \’Chromium\’;v=\’126\’, \’Google Chrome\’;v=\’126\’\’,

\’Sec-Ch-Ua-Mobile\’: \’?0\’,

\’Sec-Ch-Ua-Platform\’:“Windows\’\’,

\’Sec-Fetch-Dest\’: \’空\’,

\’Sec-Fetch-Mode\’: \’cors\’,

\’Sec-Fetch-Site\’: \’同源\’,

\’用户代理\’ : \’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko 等) Chrome/126.0.0.0 Safari/537.36\’

}

# Excel文件的保存路径和文件名

Excel_file=r\’C:\\Users\\dell\\Picture\\孙云珠\\pic_urls.xlsx\’

#新建一个Excel工作簿

wb=工作簿()

ws=wb.活动

ws.title=\’照片网址\’

ws.append([\’图片链接\’]) #添加标题

# 定义一个生成时间戳的函数

defgenerate_timestamp():

返回值str(int(time.time() * 1000))

# 主程序逻辑

Base_url=\’https://pic.sogou.com/napi/pc/searchList\’

起始页码=48

结束页码=1008

页增量=48

范围内的页码(start_pagenum, end_pagenum + 1, page_increment):

尝试:

# 构建请求URL和参数

url=base_url + f\’?mode=2start={pagenum}xml_len=48query=%E5%AD%99%E5%85%81%E7%8F%A0channel=pc_pic\’

这次=generate_timestamp()

headers[\’X-Time4p\’]=这次

#发送GET请求

响应=request.get(url, headers=headers)

response.raise_for_status() # 检查请求是否成功

# 解析JSON 响应

数据=响应.json()

# 输出JSON数据到屏幕

print(f\’检索到的JSON 数据:\\n{json.dumps(data, indent=2, Ensure_ascii=False)}\’)

# 获取图片链接并写入Excel表格

如果数据和数据中的“数据”以及数据中的“项目”[\’数据\’]:

项目=数据[\’数据\’][\’项目\’]

商品数量: 件

pic_url=item.get(\’picUrl\’)

对于pic_url:

print(f\’图片链接:{pic_url}\’)

ws.append([pic_url]) #写入Excel表格

: 其他

print(\’未找到图片链接\’)

: 其他

print(\’未找到数据或项目密钥\’)

除了requests.Exceptions.RequestException 作为e:

print(f\’请求失败: {e}\’)

# 随机暂停3-6秒

暂停时间=random.uniform(3, 6)

print(f\’随机暂停{pause_time:2f} 秒\’)

time.sleep(暂停时间)

print(\’所有操作完成!\’)

# 保存Excel文件

wb.save(Excel 文件)

# 关闭Excel 工作簿

wb.close()

获取图片下载地址,使用迅雷批量下载,下载速度更快。

以上#AI网络爬虫:搜狗图像时间戳爬虫对策的信息摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91681.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月23日 上午6:43
下一篇 2024年6月23日 上午7:37

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注