【发布时间】:2017-05-01 08:15:26
【问题描述】:
我正在尝试在一个表中练习抓取该表属于 css 类“表”并且该表有很多 tr 并且每个 tr 有 3 个 td 第一个 td 用于名称第二个 td 用于地址第三个 td(如果存在)电话号码)我需要每个“tr”的姓名、地址和电话,但由于某种原因,如果将选择器设置为 'td :: text'(每个 tr 内所有 td 的文本)工作正常,但我需要姓名、地址和电话分别
所以我使用 xpath 并为名称的第一个 td 执行此操作,第二个 td 为地址,如果存在,则为电话号码的第三个 td
NAME_SELECTOR = '//tr/td[1]/text()'
ADDRESS_SELECTOR = '//tr/td[2]/text()'
PHONE = '//tr/td[3]/text()'
yield {
'name': np.xpath(NAME_SELECTOR).extract_first(),
'address': np.xpath(ADDRESS_SELECTOR).extract_first(),
'phone': np.xpath(PHONE).extract_first(),
}
为什么会有这个垃圾值?它应该工作代码很简单网站也很简单(这就是我选择它进行练习的原因)
这是完整的代码
try:
import scrapy
except ImportError:
print "\nERROR IMPORTING THE NECESSARY LIBRARIES\n"
class NameSpider(scrapy.Spider):
name = 'name spider'
start_urls = ['http://www.locatefamily.com/Street-Lists/Australia/index-1.html']
def parse(self, response):
SET_SELECTOR = 'table.table tr'
for np in response.css(SET_SELECTOR):
NAME_SELECTOR = '//tr/td[1]/text()'
ADDRESS_SELECTOR = '//tr/td[2]/text()'
PHONE = '//tr/td[3]/text()'
yield {
'name': np.xpath(NAME_SELECTOR).extract_first(),
'address': np.xpath(ADDRESS_SELECTOR).extract_first(),
'phone': np.xpath(PHONE).extract_first(),
}
【问题讨论】:
标签: python css xpath web-scraping scrapy