当前位置: 代码迷 >> python >> 将字符串添加到抓取的网址(抓取)
  详细解决方案

将字符串添加到抓取的网址(抓取)

热度:28   发布时间:2023-06-13 17:01:06.0

我做了一个刮板,可以浏览论坛中的主题并保存用户发布的所有链接。 问题在于论坛使用了“您真的要离开该网站”的东西。 这使得我抓取的链接不完整,如下所示:

/leave.php?u=http%3A%2F%2Fwww.lonestatistik.se%2Floner.asp%2Fyrke%2FUnderskoterska-1242

要工作,它需要链接开头的website域。

有办法添加吗? 或仅抓取目标网址。

def parse(self, response):
    next_link = response.xpath("//a[contains(., '>')]//@href").extract()[0]
    if len(next_link):
        yield self.make_requests_from_url(urljoin(response.url, next_link))

    posts = Selector(response).xpath('//div[@class="post_message"]')
    for post in posts:
        i = TextPostItem()
        i['url'] = post.xpath('a/@href').extract()

        yield i

-edit-因此,基于eLRuLL的答案,我做到了。

def parse(self, response):
    next_link = response.xpath("//a[contains(., '>')]//@href").extract()[0]
    if len(next_link):
        yield self.make_requests_from_url(urljoin(response.url, next_link))
    posts = Selector(response).xpath('//div[@class="post_message"]')
    for post in posts:
        i = TextPostItem()
        url = post.xpath('./a/@href').extract_first()
        i['new_url'] = urljoin(response.url, url)

        yield i

哪个有效。 除此之外,我现在为每个帖子都抓取一个URL,即使该帖子没有发布链接。

看起来您需要在新网址的开头添加域网址。 您可以尝试使用response.url将基本网址附加到新网址中,如下所示:

from urlparse import urljoin
...
url = post.xpath('./a/@href').extract_first()
new_url = urljoin(response.url, url) # someurl.com/leave.php?...
yield Request(new_url, ...)
...
  相关解决方案