【发布时间】:2013-11-30 17:06:28
【问题描述】:
再一次,我似乎在这个问题上有一堵砖墙,我希望有人能不费吹灰之力地回答它。
下面是一个示例代码:
def parse_page(self,response):
hxs = HtmlXPathSelector(response)
item = response.meta['item']
item["Details_H1"] = hxs.select('//*[@id="ctl09_p_ctl17_ctl04_ctl01_ctl00_dlProps"]/tr[1]/td[1]/text()').extract()
return item
似乎Details_H1 中的@id 可能会改变。例如。对于一个页面,它可以是@id="ctl08_p_ctl17_ctl04_ctl01_ctl00_dlProps,对于下一页,它是随机的@id="ctl09_p_ctl17_ctl04_ctl01_ctl00_dlProps。
我想实现一个等效的do until 循环,以便代码循环遍历以 1 为增量的数字,直到 XPath 产生的值非零。因此,例如我可以设置 i=108 并且每次 i=i+1 直到hxs.select('//*[@id="ctl09_p_ctl17_ctl04_ctl01_ctl00_dlProps"]/tr[1]/td[1]/text()').extract() []
我将如何实现这一点?
非常感谢您的帮助和贡献
编辑 1
TNT 解决了以下问题。代码应为:
def parse_page(self,response):
hxs = HtmlXPathSelector(response)
item = response.meta['item']
item["Details_H1"] = hxs.select('//*[contains(@id, "_p_ctl17_ctl04_ctl01_ctl00_dlProps")]/tr[1]/td[1]/text()').extract()
return item
【问题讨论】:
-
使用一个全局变量或一个作为计数器的参数,并格式化你的字符串以适应它。
-
我对python语法不太熟悉。您能否提供一个示例或将我链接到涵盖它的文章
标签: python xpath web-scraping screen-scraping scrapy