Как я могу создать Селектор CSS, чтобы выбрать содержимое td, используя содержимое th? - PullRequest
0 голосов
/ 09 января 2019

Я пишу сканер с использованием scrapy и, используя следующую строку Python, мне удалось получить данные, которые я ищу:

Python line:

response.css("article.college div.span8.profile > table > tbody > tr").extract()

Возвращает мне следующий результат:

['<tr>\n<th>Institution Name:</th>\n<td>Harvard University</td>\n</tr>',
 '<tr>\n<th>Administration</th>\n<td>Private</td>\n</tr>',
 '<tr>\n<th>State</th>\n<td>\nMassachussets\t\n</td>\n</tr>']

Однако я хотел бы получить доступ к индексации значения атрибута по имени атрибута. Я хочу сделать что-то вроде этого:

response.css(<magic containing 'Institution Name'>)

И сможет получить соответствующее значение, в этом случае это:

\n<td>Harvard University</td>\n

Может кто-нибудь помочь мне понять это?

Спасибо

Ответы [ 3 ]

0 голосов
/ 09 января 2019

Я изменяю ваш экстрактор как xpath:

response.xpath("//table//tbody//tr[contains(., 'Institution Name')]/td/text()").extract()

Я только что добавил, что любой tr, содержащий Institution Name текст (с учетом регистра), затем выбирает td из этого tr

0 голосов
/ 09 января 2019

В этих ситуациях я использую списочные представления, подобные этому

institution_name = [line.css("td").extract_first() for line in response.css("article.college div.span8.profile > table > tbody > tr") if "Institution Name" in line.extract()]
0 голосов
/ 09 января 2019

Вы можете попробовать использовать XPath:

response.xpath('//tr[th="Institution Name:"]/td/text()').extract()
...