【发布时间】:2014-02-09 19:15:18
【问题描述】:
我使用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'])
感激地收到任何更好/更好的解决方案。
【问题讨论】:
标签: javascript python web-scraping beautifulsoup python-requests