我正在尝试编写一些python来刮擦网上的固件/驱动程序更新,但是不同的网页响应方式有所不同。
我已经使用请求和lxml包来基于xpath查找信息。通过在chrome中打开URL,右键单击数据并检查它,然后在显示代码时再次右键单击并选择复制xpath来找到Xpath。
工作示例
英特尔NUC位于https://downloadcenter.intel.com/product/76977/Intel-NUC-Kit-D54250WYK。
在2019-12-25,它正确获取的数据值为“ 24.3”。
import requests
from lxml import html
url="https://downloadcenter.intel.com/product/76977/Intel-NUC-Kit-D54250WYK"
page = requests.get(url)
XpathToFWtype = '//*[@id="search-results"]/tbody/tr[1]/td[4]/text()'
tree.xpath(XpathToFWtype)
失败示例
对于ASUS网站,类似的逻辑失败,它应该在固件文本 1.1.2.3_790 版本中显示:
https://www.asus.com/lk/Networking/DSL-AC56U/HelpDesk_BIOS/
失败的xpath从inspect语句返回为:
//*[@id="Manual-Download"]/div[2]/div[2]/div/div/section/div[1]/div[1]span[1]
无论我添加“ / text()”还是任何变体,我尝试的所有操作均失败。网页的不同之处在于“查看源代码”显示的是英特尔url的文本,而不是Asus的文本,因此它是在某处动态生成的-但是我不确定经过几天尝试下一步该怎么做。
import requests
from lxml import html
url="https://www.asus.com/lk/Networking/DSL-AC56U/HelpDesk_BIOS/"
page = requests.get(url)
XpathToFWtype = '//*[@id="Manual-Download"]/div[2]/div[2]/div/div/section/div[1]/div[1]/span[1]/text()'
tree.xpath(XpathToFWtype)
# etc -> many traceback errors from lxml :-(
感谢您的任何建议或指导,非常感谢
答案 0 :(得分:1)
对于INTEL
网站,您可以执行以下操作:
import requests
from bs4 import BeautifulSoup
r = requests.get(
"https://downloadcenter.intel.com/product/76977/Intel-NUC-Kit-D54250WYK")
soup = BeautifulSoup(r.text, 'html.parser')
for item in soup.findAll("td", {'class': 'dc-version collapsible-col collapsible1'}):
item = item.text
print(item[0:item.find("L")])
输出:
24.3
0054
1.0.0
6.1.9
15.40.41.5058
1.01
1
6.0.1.7982
11.0.6.1194
15.36.28.4332
15.40.13.4331
15.36.26.4294
14.5.0.1081
2.4.2013.711
10.1.1.8
10.0.27
2.4.2013.711
2.4.2013.711
对于ASUS
网站,它实际上是使用JavaScript
来呈现其内容。因此您将需要使用Selenium
或PhantomJS
。但是我已经能够将XHR
定位到JSON
API
并通过请求调用它了:)。
import requests
r = requests.get(
"https://www.asus.com/support/api/product.asmx/GetPDBIOS?website=lk&pdhashedid=RtHWWdjImSzhdG92&model=DSL-AC56U&cpu=").json()
for item in r['Result']['Obj']:
for data in item['Files']:
print(data['Version'])
输出:
1.1.2.3_790
1.1.2.3_743
1.1.2.3_674
1.1.2.3_617
1.1.2.3_552
1.1.2.3_502
1.1.2.3_473
您可以从这里解析任何内容:) https://www.asus.com/support/api/product.asmx/GetPDBIOS?website=lk&pdhashedid=RtHWWdjImSzhdG92&model=DSL-AC56U&cpu=