将字符串添加到已删除的URL(scrapy)

时间:2015-10-24 21:39:23

标签: python web-crawler scrapy

我已经制作了一个刮刀在论坛中通过线程并保存用户发布的所有链接。问题是论坛使用了“你真的想离开网站”的事情。这使我链接不完整如此:

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

要使用它,需要链接开头的网站域。

有没有办法以某种方式添加它?或者只是刮掉目标网址。

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

CNC中 所以,根据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

哪个有效。除此之外,我现在为每一个帖子搜索一个网址,即使该帖子没有发布链接。

1 个答案:

答案 0 :(得分:1)

看起来您需要在新网址的开头添加域网址。您可以尝试使用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, ...)
...