gpt4 book ai didi

javascript - 如何获取从网页链接的 JS 重定向 pdf

转载 作者:行者123 更新时间:2023-11-30 17:37:56 25 4
gpt4 key购买 nike

我正在使用requests获取网页,例如如下。

import requests
from bs4 import BeautifulSoup
url = "http://www.ofsted.gov.uk/inspection-reports/find-inspection-report/provider/CARE/EY298883"
r = requests.get(url)
soup = BeautifulSoup(r.text)

对于这些页面中的每一个,我都想获得标题为“最新报告”的部分中指向的第一个 pdf。你怎么能用漂亮的汤做这个?

HTML 的相关部分是

 <tbody>
<tr>
<th scope="col">Latest reports</th>
<th scope="col" class="date">Inspection <br/>date</th>
<th scope="col" class="date">First<br/>publication<br/>date</th>
</tr>
<tr>
<td><a href="/provider/files/1266031/urn/106428.pdf"><span class="icon pdf">pdf</span> Early years inspection report </a></td>
<td class="date">12 Mar 2009</td>
<td class="date">4 Apr 2009</td>
</tr> </tbody>

下面的代码看起来应该有效,但实际上没有。

ofstedbase = "http://www.ofsted.gov.uk"
for col_header in soup.findAll('th'):
if not col_header.contents[0] == "Latest reports": continue
for link in col_header.parent.parent.findAll('a'):
if 'href' in link.attrs and link['href'].endswith('pdf'): break
else:
print '"Latest reports" PDF not found'
break
print '"Latest reports" PDF points at', link['href']
p = requests.get(ofstedbase+link['href'])
print p.content
break

问题是 p 包含另一个网页,而不是它应该包含的 pdf。有什么方法可以获取实际的 pdf 吗?


更新:

让它与 BeautifulSoup 的又一次迭代一起工作

 souppage = BeautifulSoup(p.text)
line = souppage.findAll('a',text=re.compile("requested"))[0]
pdf = requests.get(ofstedbase+line['href'])

感谢收到任何更好/更好的解决方案。

最佳答案

这不是最干净的解决方案,但您可以遍历列标题直到找到“最新报告”,然后在该表中搜索指向 PDF 文件的第一个链接。

for col_header in soup.findAll('th'):
if not col_header.contents[0] == "Latest reports": continue
for link in col_header.parent.parent.findAll('a'):
if 'href' in link.attrs and link['href'].endswith('pdf'): break
else:
print '"Latest reports" PDF not found'
break
print '"Latest reports" PDF points at', link['href']
break

您可以尝试使用 Selenium WebDriver (python -m "easy_install"selenium) 自动指示 Firefox 下载文件。这需要 Firefox:

from selenium import webdriver
from bs4 import BeautifulSoup

profile = webdriver.FirefoxProfile()
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', ('application/pdf'))
profile.set_preference("pdfjs.previousHandler.alwaysAskBeforeHandling", False)
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
profile.set_preference("browser.download.manager.showWhenStarting", False)

driver = webdriver.Firefox(firefox_profile = profile)
base_url = "http://www.ofsted.gov.uk"
driver.get(base_url + "/inspection-reports/find-inspection-report/provider/CARE/EY298883")
soup = BeautifulSoup(driver.page_source)

for col_header in soup.findAll('th'):
if not col_header.contents[0] == "Latest reports": continue
for link in col_header.parent.parent.findAll('a'):
if 'href' in link.attrs and link['href'].endswith('pdf'): break
else:
print '"Latest reports" PDF not found'
break
print '"Latest reports" PDF points at', link['href']
driver.get(base_url + link['href'])

这个解决方案非常强大,因为它可以完成人类用户可以做的所有事情,但它也有缺点。例如,我曾尝试解决 Firefox 提示下载的问题,但它对我不起作用。结果可能因您安装的附加组件和 Firefox 版本而异。

关于javascript - 如何获取从网页链接的 JS 重定向 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com