Scrapy, Python, Xpath, как сопоставить соответствующие элементы в HTML - PullRequest
0 голосов
/ 17 марта 2011

Я новичок в Xpath, пытаюсь отсканировать веб-сайт в следующем формате:

<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_date </div>
    <div class="middle"> listed_value </div>
</div>
<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_date </div>
</div>
<div class="top">
    <a> tittle_name </a>
    <div class="middle"> listed_value </div>
</div>

Присутствие list_value и selected_date не является обязательным.

Мне нужно сгруппировать каждое имя tittle_name с соответствующей перечисленной даты, named_value (если доступно), затем вставьте запись о достижении в MySQL.

Я использую scrapy shell , который дает несколько основных примеров, таких как

listings = hxs.select('//div[@class=\'top\']')
for listing in listings:
    tittle_name = listing.select('/a//text()').extract()
    date_values = listing.select('//div[@class=\'middle\']')

Приведенный выше код дает мне список tittle_name и список доступных named_date, selected_value, , но как их сопоставить ?(мы не можем перейти по индексу, потому что формат не является симметричным).

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Обратите внимание, что эти выражения XPath являются абсолютными:

/a//text()

//div[@class=\'middle\']

Вам понадобится относительное выражение XPath, например:

a

div[@class=\'middle\']

Секунда.Не стоит выбирать текстовые узлы в смешанной модели содержимого, такой как (X) HTML.Вы должны извлечь строковое значение с помощью правильного метода DOM или с помощью функции string().(В последнем случае вам нужно будет оценить выражение для каждого узла , потому что неявный набор узлов приведен к набору одноэлементных узлов)

0 голосов
/ 17 марта 2011

Ну, поскольку на веб-сайте не указано, является ли что-то в div[@class='middle'] датой или значением, вам придется кодировать свой собственный способ решения этого вопроса.

Я полагаю, даты имеюткакой-то конкретный формат, который вы могли бы сопоставить с некоторым анализом, возможно, используя регулярное выражение.

Можете ли вы быть более точным в отношении возможных значений для listed_date и listed_value?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...