鱼C论坛

 找回密码
 立即注册
查看: 2082|回复: 12

[已解决]求解惑

[复制链接]
发表于 2023-5-21 12:50:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
requests问题:
1. headers是写在自定义的爬取页面函数里,还是全局更好
2. 为什么开发工具可以看见的东西,requests爬取不到
最佳答案
2023-5-21 12:52:20
本帖最后由 isdkz 于 2023-5-21 12:53 编辑

1.  headers 的位置取决于你的具体需求。如果你的所有请求都需要相同的headers,那么在全局定义可能更合适,以避免重复。如果某些请求需要不同的headers,那么在特定的函数内部定义可能更合适。无论在全局还是在函数内定义headers,你都应该确保它们在需要时可用。

   示例:
# 全局定义
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
   
def get_page(url):
    response = requests.get(url, headers=headers)
    # do something with the response...
   

   或者:

# 在函数内定义
def get_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    response = requests.get(url, headers=headers)
    # do something with the response...
   

2. 关于你的第二个问题,这可能是因为网页内容是由JavaScript动态生成的。 requests 库只能获取服务器返回的静态HTML内容,它不能像浏览器那样执行JavaScript来生成动态内容。

   开发者工具(如Chrome的开发者工具)能看到的内容包括服务器返回的原始HTML内容和浏览器执行JavaScript后生成的动态内容。当你在开发者工具中查看页面源码时,你看到的可能是动态生成的内容。

   如果你想抓取的内容是由JavaScript动态生成的,你可能需要使用一种可以执行JavaScript的工具,比如Selenium、Pyppeteer或者Puppeteer等。或者你也可以尝试分析JavaScript或者XHR请求,看看数据是否可以从其他来源获取。这通常比执行JavaScript更快,更有效率。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-21 12:52:20 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2023-5-21 12:53 编辑

1.  headers 的位置取决于你的具体需求。如果你的所有请求都需要相同的headers,那么在全局定义可能更合适,以避免重复。如果某些请求需要不同的headers,那么在特定的函数内部定义可能更合适。无论在全局还是在函数内定义headers,你都应该确保它们在需要时可用。

   示例:
# 全局定义
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
   
def get_page(url):
    response = requests.get(url, headers=headers)
    # do something with the response...
   

   或者:

# 在函数内定义
def get_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
    }
    response = requests.get(url, headers=headers)
    # do something with the response...
   

2. 关于你的第二个问题,这可能是因为网页内容是由JavaScript动态生成的。 requests 库只能获取服务器返回的静态HTML内容,它不能像浏览器那样执行JavaScript来生成动态内容。

   开发者工具(如Chrome的开发者工具)能看到的内容包括服务器返回的原始HTML内容和浏览器执行JavaScript后生成的动态内容。当你在开发者工具中查看页面源码时,你看到的可能是动态生成的内容。

   如果你想抓取的内容是由JavaScript动态生成的,你可能需要使用一种可以执行JavaScript的工具,比如Selenium、Pyppeteer或者Puppeteer等。或者你也可以尝试分析JavaScript或者XHR请求,看看数据是否可以从其他来源获取。这通常比执行JavaScript更快,更有效率。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 12:54:42 | 显示全部楼层
关于headers的写法,应该根据具体情况来定。如果headers是对于整个爬虫来说都要使用的,则可以定义为全局变量;如果headers只是对于某一个特定的请求需要设置不同的headers信息,那么建议将headers定义在对应的请求函数中。
有些开发工具会设置反爬虫策略,当你使用requests进行爬取时,可能会被这些反爬虫策略所拦截。此外,有些网站还会对请求头进行检查,如果请求头与正常的浏览器访问的请求头不一致,也会被拦截。针对这种情况,可以尝试设置更加详细的请求头,模拟真实的浏览器访问;或者可以尝试使用代理IP等方法来规避反爬虫措施。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-21 12:55:36 | 显示全部楼层
isdkz 发表于 2023-5-21 12:52
1.  headers 的位置取决于你的具体需求。如果你的所有请求都需要相同的headers,那么在全局定义可能更合适 ...


这gpt不错啊,还会编辑帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 12:56:10 | 显示全部楼层
歌者文明清理员 发表于 2023-5-21 12:52
刚才我的gpt回了
Something went wrong, please try again later.

你的脚本什么原理?我是调用api的,不过我现在把自动回复关了,现在脚本只是提示我有新问题,然后手动回的

先避避风头,免得某人又出来咬我

点评

我很赞同!: 5.0
在线肯定会增加在线时长呀  发表于 2023-5-21 13:16
脚本会刷在线时长哦吗?  发表于 2023-5-21 13:00
我很赞同!: 5
  发表于 2023-5-21 13:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 12:56:59 | 显示全部楼层
isdkz 发表于 2023-5-21 12:56
你的脚本什么原理?我是调用api的,不过我现在把自动回复关了,现在脚本只是提示我有新问题,然后手动回 ...

可是我的脚本有一定概率会Something went wrong, please try again later.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 12:57:55 | 显示全部楼层
1. headers的位置应该视具体情况而定。如果对于所有的请求都需要使用相同的headers,则可以将header设置为全局变量,这样可以不必每次请求都重复代码;如果headers各不相同,则应在自定义爬取页面函数里设置。

2. 这可能是由于开发工具和requests发送请求时使用不同的user-agent或cookie等信息导致的。建议使用开发者工具中的网络选项卡,查看请求头和响应头信息来确定是否存在差异,并尝试在requests中设置相应的参数来解决问题(例如,设置user-agent、cookie等)。同时也应注意目标网站可能会封禁爬虫,以及网站本身存在反爬虫机制等问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 13:06:27 | 显示全部楼层
21kwimpizswmp 发表于 2023-5-21 12:55
这gpt不错啊,还会编辑帖子

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 13:26:01 | 显示全部楼层


他给了我灵感
可以用gpt先占楼再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-21 13:28:05 | 显示全部楼层
歌者文明清理员 发表于 2023-5-21 13:26
他给了我灵感
可以用gpt先占楼再说

你可以试试

看黑山咬不咬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 03:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表