问题
我现在进入一个自然语言处理项目。在我弄脏我的手之前,我计划在dataset上阅读其他人的作品,在那里他们被组织为一个领导板 (参见“三向分类”部分)。
然而,为了下载这些文件,我需要手动点击每个URL (其中大约有50个),这是耗时的。因此,我试图从HTML中提取这些URL,如下所示:
<h3>Three-way classification</h3>
<blockquote>
<table class="newstuff">
<tr class="header">
<th>Publication</th>
<th> Model</th>
<th>Parameters</th>
<th> Train (% acc)</th>
<th> Test (% acc)</th>
</tr>
<tr class="section">
<th colspan="5" style="background-color:transparent; color:#646464;">Feature-based models</th>
</tr>
<tr>
<td><a href="http://nlp.stanford.edu/pubs/snli_paper.pdf">Bowman et al. '15</a></td>
<td>Unlexicalized features</td>
<td></td>
<td style="text-align: right">49.4</td>
<td style="text-align: right">50.4</td>
</tr>
<tr>
<td><a href="http://nlp.stanford.edu/pubs/snli_paper.pdf">Bowman et al. '15</a></td>
<td>+ Unigram and bigram features</td>
<td></td>
<td style="text-align: right">99.7</td>
<td style="text-align: right"><em>78.2</em></td>
</tr>
<tr class="section">
<th colspan="5" style="background-color:transparent; color:#646464;">Sentence vector-based models</th>
</tr>
<tr>
<td><a href="http://nlp.stanford.edu/pubs/snli_paper.pdf">Bowman et al. '15</a></td>
<td>100D LSTM encoders</td>
<td style="text-align: right">220k</td>
<td style="text-align: right">84.8</td>
<td style="text-align: right">77.6</td>
</tr>
<tr>
<td><a href="https://www.nyu.edu/projects/bowman/spinn.pdf">Bowman et al. '16</a></td>
<td>300D LSTM encoders</td>
<td style="text-align: right">3.0m</td>
<td style="text-align: right">83.9</td>
<td style="text-align: right">80.6</td>
</tr>
<tr>
<td><a href="http://arxiv.org/pdf/1511.06361v3.pdf">Vendrov et al. '15</a></td>
<td>1024D GRU encoders w/ unsupervised 'skip-thoughts' pre-training</td>
<td style="text-align: right">15m</td>
<td style="text-align: right">98.8</td>
<td style="text-align: right">81.4</td>
</tr>
...我知道我可以使用requests和bs4.BeautifulSoup下载和解析这个页面。但是我想不出一种提取URL的方法,因为找出每一行并不容易(表外还有其他URL,所以我不能说从HTML中提取的URL就是我想要的)。
有人能帮我吗?提前谢谢你。
更新
主要的困难是从主板中只提取,它被标记为
<h3>Three-way classification</h3>
<blockquote>
<table class="newstuff">
...
</table>
</blockquote>在这个排行榜之前和之后,有许多与我的目的无关的上下文,其中也有很多URL。
发布于 2020-09-16 02:01:38
可以使用正则表达式和findall()方法来查找来自给定html内容的所有交互链接。
BeautifulSoup提供了一种从html中读取表的简单方法。
通过使用regex和BeautifulSoup,可以实现在给定的html内容中读取pdf链接的目标。
使用regex和BeatifulSoup的BeatifulSoup工作示例
# File name: find-pdf-links.py
import re
from bs4 import BeautifulSoup
htmlContent = """
<h3>Three-way classification</h3>
...
<td><a href="http://nlp.stanford.edu/pubs/snli_paper.pdf">
...
<td><a href="http://nlp.stanford.edu/pubs/snli_paper.pdf">
....
<td><a href="http://nlp.stanford.edu/pubs/snli_paper.pdf">
......
<td><a href="https://www.nyu.edu/projects/bowman/spinn.pdf">
...
<td><a href="http://arxiv.org/pdf/1511.06361v3.pdf">
"""
# Read webpage
webPage = BeautifulSoup(htmlContent)
# Read table form the webpage
tableOfLinks = webPage.find("table")
print("PDF links:")
for link in tableOfLinks.findAll('a', attrs={'href': re.compile("^http://.*pdf$")}):
print(link.get('href'))输出:
> python find-pdf-links.py
PDF links:
http://nlp.stanford.edu/pubs/snli_paper.pdf
http://nlp.stanford.edu/pubs/snli_paper.pdf
http://nlp.stanford.edu/pubs/snli_paper.pdf
http://arxiv.org/pdf/1511.06361v3.pdf更多信息:
https://stackoverflow.com/questions/63911855
复制相似问题