豆瓣这个页面的反爬用了什么黑科技

2020-12-22 16:27:33 +08:00
 wjfz

目前的情况:

1 、在终端里直接 curl 不加任何参数是可以获取到的

curl https://www.douban.com/doubanapp/h5/book/2567698/desc

2 、Python requests 库获取不到

3 、PHP curl 带上从 chrome 复制的全套 header 也获取不到。

疑问的点

1 、终端里不带参数为什么能请求到

2 、用代码的方式不管怎样都请求不到,即使带了 chrome 能正常访问的全套 header

import requests
import os


os.system('curl https://www.douban.com/doubanapp/h5/book/2567698/desc')

url = 'https://www.douban.com/doubanapp/h5/book/2567698/desc'
strhtml = requests.get(url)
print(strhtml.text)
822 次点击
所在节点    问与答
10 条回复
manzhiyong
2020-12-22 16:28:32 +08:00
不能老实的用 selenium 吗
fiveelementgid
2020-12-22 16:32:05 +08:00
首先,终端不带参数还是还是有默认 Header 头的
你用 curl -v 查查看
maocat
2020-12-22 16:33:31 +08:00
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}

requests.get(url,headers=headers) <Response [200]>
requests.get(url) # <Response [418]>
songjiaxin2008
2020-12-22 16:34:48 +08:00
curl 默认就是 curl 的 ua 哦
songjiaxin2008
2020-12-22 16:35:20 +08:00
@maocat #3 正解,requests 包也有自己的默认 UA
JetMac
2020-12-22 16:41:27 +08:00
418 I'm a teapot
wjfz
2020-12-22 16:42:50 +08:00
@maocat 尴尬,用 PHP 的 curl 试了下不行就没用 Python 试着加 header 了。看来还是 PHP 的 curl 库不对劲。
HFX3389
2020-12-22 16:44:15 +08:00
requests 包默认的 UA 是:python-requests/{package version}
wjfz
2020-12-22 16:45:06 +08:00
@fiveelementgid
@maocat
@songjiaxin2008
@HFX3389

请教一下,那我用 PHP 带了全套 header,包含 ua 和 cookie,依然是请求不到的,这有可能是什么原因
wjfz
2020-12-22 16:56:55 +08:00
原因找到了,太愚蠢了,PHP 的 curl 是单独设置 ua 的,没在 header 数组里。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX