我正在努力解决以下问题website
我注意到,在页面之间导航期间,有一个XHR POST请求对以下EndPoint执行,您可以在下面的打印屏幕中看到:
在POST请求中遇到的问题是,我注意到在GBK-
之后有一个动态值,但我不知道它是从哪里生成的,也不知道如何获得它
如果您只是在页面之间保持导航,您将注意到值keep changes
由Life is complex
根据以下答案进行更新:
以下是如何向API发送POST
请求:
import requests
# we need the value!
url = "http://app1.nmpa.gov.cn/data_nmpa/face3/search.jsp?6SQk6G2z=GBK-Value"
# here you can add headers as you need!
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0",
"Accept": "*/*",
"Accept-Language": "en-US,en;q=0.5",
"cache-control": "no-cache",
"Content-Type": "application/x-www-form-urlencoded",
"Pragma": "no-cache"
}
data = {
"tableId": "27",
"State": [
"1",
"1",
"1",
"1",
"1",
"1",
"1"
],
"bcId": "152904442584853439006654836900",
"tableName": "TABLE27",
"viewtitleName": "COLUMN200",
"viewsubTitleName": "COLUMN192,COLUMN199",
"curstart": "2", # here is the Page number
"tableView": "进口医疗器械产品(注冿"
}
r = requests.post(url, headers=headers, data=data)
正如其他人所说:本网站采用了先进的机器人保护。要解决这个问题,您必须研究除臭JavaScript,看看它们是如何生成这些
GBK
值的因此,我的答案将是一个切实可行的解决办法:
我强烈建议使用puppeteer,一种使用ChromeAPI的JavaScript无头浏览器。现在,单凭这一点是无法绕过这种机器人保护的,因为一个如此复杂的网站最有可能使用工具捕获自动浏览器。然而,我首先推荐Puppeter的原因是它有一个很棒的扩展名puppeteer stealth,我在过去成功地使用过很多次。此扩展允许您以1:1的比例模拟真实的浏览器
我真的认为这个解决方案是最实际的
结论-07-25-2021
在更详细地研究了这个问题之后,我认为在技术上不可能使用Python
Requests
来删除您问题中的网站和表格。这意味着你的问题无法以你喜欢的方式解决。
为什么?
该网站采用了防刮机制
GBK
值只是这些机制的一部分。您要刮的表有1504页。每次从第1页导航到下一页时,都会创建一个新的唯一GBK
值,以此类推。因此有1503个唯一的GBK
值该站点还为每个页面使用唯一的会话管理cookie
因此,您需要为2到1504之间的每个页面获取唯一的
GBK
值和唯一的会话管理cookie我还注意到该站点采用了某种类型的延迟。第一页可能需要一些时间才能完全加载。如果在此页面加载完成之前尝试导航到其他页面,您将收到此消息“请勿频繁操作!"
有些页面加载时间长达2分钟,这不值得。当它们没有加载时,上面的消息会显示出来
<> >e>强>就像前面提到的,你应该考虑用{{CD6}}来刮除这个站点,这可能绕过防刮机制。<强> EEM >更新帖子(硒)-07-27-2021
我试图用
selenium
刮取您的目标网站。chromedriver
持续无法连接到该网站。即使使用了以下开关:我还尝试使用undetected-chromedriver,但也无法连接属性
即使我使用
driver.set_page_load_timeout()
或driver.implicitly_wait()
设置了高超时时间,会话仍然会使用chromedriver
失败当我使用
selenium
和geckodriver.
时,我能够访问该网站。仍然存在超时问题,但是添加一个WebDriverWait
和一个expected_conditions
组合似乎可以克服一些超时问题由于使用了反刮擦机制,刮擦这个网站将是一个漫长而艰巨的过程
最初发布于2021年7月24日
首先让我说,您的问题没有足够的细节来为解决您的问题提供可靠的建议。
我调查了你的问题。我发现你的目标网站使用了一些Javascript来动态创建每个post请求使用的
GBK
值这个
GBK
值在第1页到第1504页之间导航时使用。我注意到每个页面的值都会发生变化GBK
值是在页面的HTML中通过此调用创建的这就是所调用的Javascript
我想看看是否有可能获得
GBK
值,并以某种方式通过PythonRequests
将其传回例如,这个代码给我一个状态代码202
在尝试使用Python
Requests
访问网站时,收到状态代码202是一个问题,因为在连接关闭之前,请求没有得到完全处理我在浏览器中注意到我得到了这些项目
我仍在探索如何在Python
Requests
帖子中传递这些项目,以获取有用的信息我没有考虑过使用
selenium,
,但在您的问题中,该软件包似乎是从该网站提取动态创建内容的最佳选择。相关问题 更多 >
编程相关推荐