如何使用python语言中的Selenium和chromedriver刮擦此页面?

问题描述 投票:0回答:1

我正在尝试使用硒和chromedriver从网站“ http://www.nmpa.gov.cn/”中抓取数据。当我运行代码时,chromedriver成功输入了url,但无法加载页面,显示空白页面。我尝试将目标网站切换为google.com,并成功进行了抓取。我得出的结论是目标网站服务器检测到硒,并拒绝发回数据。因此,如何使用python语言中的selenium和chromedriver从网站上抓取数据。我是一名Python初学者,非常感谢您提前提供的帮助。这是我的简单代码:

from selenium import webdriver
my_driver_path = r"C:\python chrome driver\chromedriver.exe"
driver = webdriver.Chrome(executable_path=my_driver_path)
driver.get('http://www.nmpa.gov.cn/')

这里是问题的照片:enter image description here

screen-scraping
1个回答
0
投票

这里的问题更多的是HTML而不是Python。

如果检查页面的源代码(可以通过添加print(driver.page_source)来执行此操作,您将看到它包含一个http-equiv属性设置为“刷新”的元标记:

<HTML><HEAD><title>NMPA</title></HEAD>
<body>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta http-equiv="refresh" content="0;URL=/WS04/CL2042/">
</HTML>

此标签的作用是将浏览器定向到给定的URL(/WS04/CL2042/,这是浏览器很幸运能够理解的格式错误的属性)。因此,代替刮除http://www.nmpa.gov.cn/,您必须刮除http://www.nmpa.gov.cn/WS04/CL2042/

如果您更改代码以访问该其他链接,则会看到整个页面。您可以使用urllib.parse.join()https://docs.python.org/3.7/library/urllib.parse.html#urllib.parse.urljoin之类的方法对新链接进行硬编码,也可以安全地将第一个链接与“刷新”目标连接在一起。

© www.soinside.com 2019 - 2024. All rights reserved.