Python Scrapy的XPATH
所以我用SCRAPY从一个网站的书上刮下来 我让爬虫程序工作,它可以很好地爬行,但是当涉及到使用XPATH中的select清理HTML时,它有点不正常。现在,因为它是一个图书网站,我在每个页面上几乎有131本书,它们的XPATH是这样的 例如,获取书籍的标题-Python Scrapy的XPATH,python,xpath,scrapy,Python,Xpath,Scrapy,所以我用SCRAPY从一个网站的书上刮下来 我让爬虫程序工作,它可以很好地爬行,但是当涉及到使用XPATH中的select清理HTML时,它有点不正常。现在,因为它是一个图书网站,我在每个页面上几乎有131本书,它们的XPATH是这样的 例如,获取书籍的标题- 1st Book-->/html/body/div/div[3]/div/div/div[2]/div/ul/li/a/span 第二本书-->/html/body/div/div[3]/div/div/div[2]/div/ul/li[
1st Book-->/html/body/div/div[3]/div/div/div[2]/div/ul/li/a/span
第二本书-->/html/body/div/div[3]/div/div/div[2]/div/ul/li[2]/a/span
第三本书-->/html/body/div/div[3]/div/div/div[2]/div/ul/li[3]/a/span
DIV[]的数字随着书的增加而增加。我不知道如何让它进入一个循环,以便它捕获所有的标题。我必须为图片和作者的名字也这样做,但我认为这将是类似的。只需要完成最初的一个
提前感谢您的帮助。以下是一个解析示例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中所有跨度的列表。确切的表达式取决于你的html,这只是给你一个想法
否则,上面的代码应该会起作用。有不同的方法来实现这一点
for i in range(0, upto_num_of_divs):
list = sel.xpath("//div[%s]" %i)
for i in range(0, upto_num_of_divs):
list = sel.xpath("//div[position > =1 and position() < upto_num_of_divs])
for i in range(0, upto_num_of_divs):
list = sel.xpath("//div[%s]" %i)
for i in range(0, upto_num_of_divs):
list = sel.xpath("//div[position > =1 and position() < upto_num_of_divs])
适用于范围内的i(0,最多为/u divs的/u num):
list=sel.xpath(//div[position>=1和position()
li
数字增加,而不是div
数字。您确定第一个表达式末尾有img
,而不是span
?div[2]也应该是div[position()=2]。您是否可以尝试不使用绝对路径,而是通过某个id/类或任何其他属性获取标题或任何元素?问题是,我必须使用绝对路径,因为它们中的大多数都具有相同的id/类名。@Choroba,很抱歉,这是一个打字错误,即/span。例如,在获取price时,所有类都是这样的—“类”=“fksd bodytext price final price”所以如果我抓取这个类,我会得到页面上的所有内容。谢谢你的解释。我确实找到了一个chrome扩展名“XPATH VIEWER”,它只通过右键单击我想要的元素来给我XPATH。例如,它会给我这样的输出=/*[@id=“search\u results”]/div[1]/div/div[2]/h2/a/text()