【问题标题】:Adding string to scraped url (scrapy)将字符串添加到抓取的 url (scrapy)
【发布时间】:2015-10-25 20:01:04
【问题描述】:

我制作了一个刮板,用于浏览论坛中的线程并保存用户发布的所有链接。问题是论坛使用了“你真的要离开网站吗”的东西。这使得我抓取的链接不完整,如下所示:

/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

-编辑- 所以,根据 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

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

【问题讨论】:

  • 尝试使用以前的 xpath a/@href 而不是 ./a/@href
  • 这现在是一个纯粹的 xpath 问题,您需要检查您网站上的正确路径。
  • 是的,一直在尝试。猜猜我最终会得到它。感谢您的帮助!

标签: python web-crawler scrapy


【解决方案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, ...)
...

【讨论】:

  • 所以基本上我用你的代码替换了我的i['url'] = post.xpath('a').extract()?它给了我一个关于“请求”的定义错误。
  • 查看我的编辑。我不明白为什么我现在要抓取每个帖子的每个网址。但是现在被抓取的链接是正确的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多