Web scraping 从网页中提取数据

Web scraping 从网页中提取数据,web-scraping,extraction,Web Scraping,Extraction,我下载了大约10000个html文件。它们有一段html代码,如下所示: <tr> <td width="10%" valign="top"><p>City:</p></td> <td colspan="2"><p> London </p></td> </tr> <tr> <td width="10%" valign=

我下载了大约10000个html文件。它们有一段html代码,如下所示:

<tr>
   <td width="10%" valign="top"><p>City:</p></td>
   <td colspan="2"><p>
        London
   </p></td>
</tr>
<tr>
   <td width="10%" valign="top"><p>City:</p></td>
   <td colspan="2"><p>
        *******
   </p></td>
</tr>

城市:

伦敦

我需要的是一种从所有文件中获取城市信息的方法。我正在使用linux,所以我想用一些批处理文件来处理sed,但是由于一些编码问题,sed不能很好地处理这些文件(一些城市有像美国这样的口音,它找不到它们的名字)。
正确的方法是什么?

最可靠的方法是使用HTML(或XML)解析器

但是,如果HTML的格式始终相同,即如下所示:

<tr>
   <td width="10%" valign="top"><p>City:</p></td>
   <td colspan="2"><p>
        London
   </p></td>
</tr>
<tr>
   <td width="10%" valign="top"><p>City:</p></td>
   <td colspan="2"><p>
        *******
   </p></td>
</tr>

城市:

*******

如果城市名称出现在星号所在的位置,则以下一行应该可以使用:

cat *.html |grep -A2 '<p>City' |tail -n1 |sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'
cat*.html | grep-A2'City'| tail-n1 | sed-e's/^[:space:]*/'-e's/[[:space:]*$/'

没有一种合适的方法。您可以使用多种工具和编程语言来实现这一点,我们至少需要知道您拥有哪些工具和语言,并且您对这些工具和语言感到满意。关于这个话题,我们不太清楚为什么你们找不到一个城市的名字。我假设您想要解析HTML并找到标记之间的部分,您应该能够找到与编码无关的部分。之后,您可能会找到另一个解决方案来更改列表的编码。我认为在目前的形式下,这个问题太广泛了。但是如果你想再次尝试
sed
,也许你可以看看。我遇到的问题是,我有一个正则表达式可以找到(或者至少我认为它可以找到)城市的名称,但是sed永远也找不到它。然后我发现,用utf8保存带有升华文本的文件可以让sed找到城市的名称,所以我想用iconv(从iso-8859-1改为utf8)更改所有html文件的编码,但是html中的重音名称在使用ut8编码的firefox中无法正确显示。我可以用utf编码复制所有文件,并获得城市名称,但我认为这太过分了,因此我的问题是,我是用linux命令utils和bashNice来完成的。但是我不得不将
--text
选项添加到grep中,因为由于重音,它将html文件视为二进制文件