0

所以我正在使用 SCRAPY 刮掉网站的书籍。

我有爬虫工作,它爬得很好,但是当谈到使用 XPATH 中的选择来清理 HTML 时,它有点不正常。现在因为它是一个图书网站,我每页有近 131 本书,他们的 XPATH 变成了这样

例如获取书籍的标题 -

1st Book --- > /html/body/div/div[3]/div/div/div[2]/div/ul/li/a/span
2nd Book --->  /html/body/div/div[3]/div/div/div[2]/div/ul/li[2]/a/span 
3rd book --->  /html/body/div/div[3]/div/div/div[2]/div/ul/li[3]/a/span 

DIV[] 数字随着书的增加而增加。我不知道如何让它进入一个循环,以便它捕获所有标题。我也必须为图像和作者姓名执行此操作,但我认为它会相似。只需要完成这个初始任务。

提前感谢您的帮助。

4

2 回答 2

2

有不同的方法可以得到这个

  1. 最好选择多个节点,根据 ids 或 class 进行选择。例如:

    sel.xpath("//div[@id='id']")
    
  2. 你可以这样选择

    for i in range(0, upto_num_of_divs):
        list = sel.xpath("//div[%s]" %i)
    
  3. 你可以这样选择

    for i in range(0, upto_num_of_divs):
        list = sel.xpath("//div[position > =1 and position() < upto_num_of_divs])
    
于 2014-05-14T11:06:44.387 回答
0

这是一个如何解析示例 html 的示例:

lis = hxs.select('//div/div[3]/div/div/div[2]/div/ul/li')
for li in lis:
    book_el = li.select('a/span/text()')

通常你可以做一些事情,比如//div[@class="final-price"]//span在一个 xpath 中获取所有 span 的列表。确切的表达方式取决于你的 html,这只是为了给你一个想法。

否则上面的代码应该可以解决问题。

于 2012-09-20T08:18:31.973 回答