首页 > 解决方案 > 使用 Python 请求模块时解析 Angular.JS

问题描述

我正在制作一个 python 脚本来从一个使用 Angular JS 的站点收集图像 url。但是,requests.get 请求返回的网站没有解析 Angular.JS。例如...

>>>import requests

>>>url = "https://website.com"
>>request = requests.get(url)

>>>requests.text
<img ng-src="{{ getThumbnail(attachment).href }}" >

我已经尝试寻找使用 requests 模块的替代方法,但我找不到其他人专门谈论这个问题,所以我使用其他模块的大部分尝试都是在黑暗中完成的。我有什么替代方法来检索 Angular href?

标签: angularjspython-3.xpython-requests

解决方案


requests-html 的问题是您的 URL,它包含 # 或片段标识符

来自https://en.wikipedia.org/wiki/Fragment_identifier

当代理(例如网络浏览器)从网络服务器请求网络资源时,代理将 URI 发送到服务器,但不发送片段。相反,代理等待服务器发送资源,然后代理根据文档类型和分片值处理资源。

requests-html 看起来不像是在使用片段标识符。

我能想到的唯一选择是使用 Selenium。

sudo pip3 install selenium

然后获取驱动程序https://sites.google.com/a/chromium.org/chromedriver/downloads(根据您的操作系统,您可能需要指定驱动程序的位置)

from selenium import webdriver


url = "https://www.namus.gov/MissingPersons/Case#/51238/"
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(10)
element = driver.find_element_by_class_name("section-list")

for child_element in element.find_elements_by_xpath(".//a"):
    print(child_element.get_attribute('href'))

driver.quit()

输出:

https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/51238/Images/83268/Original
https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/51238/Images/83270/Original
https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/51238/Images/83271/Original
https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/51238/Images/83272/Original
https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/51238/Images/83273/Original
https://www.namus.gov/api/CaseSets/NamUs/MissingPersons/Cases/51238/Images/83274/Original

推荐阅读