在python中使用xpath隔离href内容

时间:2018-08-05 18:18:48

标签: python xpath web-scraping

我正在寻找页面底部kijji上“下一个”页面按钮的href内的文本。

链接:https://www.kijiji.ca/b-apartments-condos/edmonton/c37l1700203

href是这个:

href="/b-apartments-condos/edmonton/page-2/c37l1700203"

主要问题是,在“分页类”中有多个href,并且它们的顺序并不总是相同(它不一定是第10个href)。

这是我到目前为止所拥有的:

response.xpath("//*[@class='pagination']/a[10]/@href").extract_first()

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果需要Next byutton的超引用值,则可以在XPath下面使用:

//a[@title="Next"]/@href

您可以按以下方式使用它:

import requests
from lxml import html

response = requests.get("https://www.kijiji.ca/b-apartments-condos/edmonton/c37l1700203").content
source = html.fromstring(response)
url = source.xpath('//a[@title="Next"]/@href')[0]

答案 1 :(得分:0)

使用BeautifulSoup中内置的CSS选择器的解决方案:

from bs4 import BeautifulSoup
import requests

url = 'https://www.kijiji.ca/b-apartments-condos/edmonton/c37l1700203'
soup = BeautifulSoup(requests.get(url).text, 'lxml')

print(soup.select_one('.pagination a[title^=Next]')['href'])

打印:

/b-apartments-condos/edmonton/page-2/c37l1700203

这将选择以<a>开头的属性title的{​​{1}}标签。此Next标签必须位于类<a>的标签下。

答案 2 :(得分:0)

您需要Scrapy:

next_page_url = response.xpath('//a[@title="Next"]/@href').extract_first()
if next_page_url:
    next_page_url = response.urljoin(next_page_url)
    yield scrapy.Request(url=next_page_url, callback=self.your_callback)