Предположим, у меня есть это:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML LANG="ja">
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META name="GENERATOR" content="snanail Version 2.18">
<TITLE>-www.example.org-</TITLE>
<STYLE type="text/css">
<!--
H1.TITLE {
font-size : 10 pt;
font-family : "Arial";
color : #FFFFFF;
}
-->
</STYLE>
</HEAD>
<BODY>
<CENTER>
<TABLE BORDER="0" CELLSPACING="1" CELLPADDING="6" ALIGN="CENTER">
<TR>
<TD WIDTH="100">
<TABLE ALIGN="CENTER" CELLPADDING="4" CELLSPACING="1">
<TR>
<TD HEIGHT="100" WIDTH= "68" ALIGN="CENTER" VALIGN="MIDDLE">
<A HREF="001.html" TARGET="_blank"><IMG SRC="001_thumb.png" WIDTH="56" HEIGHT="80" ALT="001_thumb.png" BORDER="0"></A>
</TD>
</TR>
<TR>
<TD HEIGHT="40" ALIGN="CENTER" VALIGN="MIDDLE">
<FONT SIZE="2" COLOR="#FFFFFF">001.jpg</FONT><BR>
<FONT SIZE="2" COLOR="#FFFFFF">300 x 300 (806 KB)</FONT><BR>
</TD>
</TR>
</TABLE>
</TD>
<TD WIDTH="100">
<TABLE ALIGN="CENTER" CELLPADDING="4" CELLSPACING="1">
<TR>
<TD HEIGHT="100" WIDTH= "68" ALIGN="CENTER" VALIGN="MIDDLE">
<A HREF="002.html" TARGET="_blank"><IMG SRC="002_thumb.png" WIDTH="56" HEIGHT="80" ALT="002_thumb.png" BORDER="0"></A>
</TD>
</TR>
<TR>
<TD HEIGHT="40" ALIGN="CENTER" VALIGN="MIDDLE">
<FONT SIZE="2" COLOR="#FFFFFF">002.jpg</FONT><BR>
<FONT SIZE="2" COLOR="#FFFFFF">300 x 300 (627 KB)</FONT><BR>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
</CENTER>
</HTML>
И я хочу найти все URL на странице и сделать:
tree = lxml.html.parse('example.html')
links = tree.xpath('//a/@href')
Все же я получаю только первое (001.html). Это почему? Я попытался вручную перебрать дерево после использования getroot()
, и кажется, что видна только первая таблица с первым URL. Я не понимаю.
Редактировать: Я снова протестировал с примером, который я опубликовал, и это действительно сработало, и после некоторого тестирования кажется, что я удаляю головку, это работает ... Может быть, что-то в этом нарушает парсер? Я не знаю. Я думаю, что лучший способ решить эту проблему - найти файл и удалить что-нибудь между <head>
и </head>
? Поскольку я не могу разобрать его из-за того, что синтаксический анализ не работает, как ожидалось. Поэтому я добавил голову к примеру, чтобы он сломался.