【问题标题】:can scrapy scrape contents of iframe using scrapy alone?scrapy可以单独使用scrapy刮掉iframe的内容吗?
【发布时间】:2014-06-19 07:47:37
【问题描述】:

我尝试复制和粘贴站点的元素(xpath),但没有返回任何结果。

scrapy 可以抓取 iframe 内的数据吗?如果是,如何做,如果不是,还应该做哪些其他事情?谢谢!

rules = (Rule (SgmlLinkExtractor(deny = path_deny_base, restrict_xpaths=('*'))
    , callback="parse", follow= True),
    )


    def parse(self, response):
        yield(Request(url, callback = self.parse_iframe))

    def parse_iframe(self, response):
        #your code to scrape the content from iframe
        #def parse_items(self, response):
        hxs = HtmlXPathSelector(response)
        titles = hxs.select('//div[2]/h1')
            #//div[2]/h1
        linker = hxs.select('//div[2]/div[10]/a[1]')
            #//div[2]/div[10]/a[1]
        loc_Con = hxs.select('//div[2]/div[1]/div[2]/span/span/span[1]') #//div[2]/div[1]/div[2]/span/span/span[1]
        loc_Reg = hxs.select('//div[2]/div[1]/div[2]/span/span/span[2]') #/div[2]/div[1]/div[2]/span/span/span[2]
        loc_Loc = hxs.select('//div[2]/div[1]/div[2]/span/span/span[3]') #/div[2]/div[1]/div[2]/span/span/span[3]
        items = []
        for titles in titles:
            item = CraigslistSampleItem()
            #item ["job_id"] = id.select('text()').extract()[0].strip()
            item ["title"] = map(unicode.strip, titles.select('text()').extract()) #ok
            item ["link"] = linker.select('@href').extract() #ok
            item ["info"] = (response.url)
            temp1 = loc_Con.select('text()').extract()
            temp2 = loc_Reg.select('text()').extract()
            temp3 = loc_Loc.select('text()').extract()
            temp1 = temp1[0] if temp1 else ""
            temp2 = temp2[0] if temp2 else ""
            temp3 = temp3[0] if temp3 else ""
            item["code"] = "{0}-{1}-{2}".format(temp1, temp2, temp3)
            items.append(item)
        return(items)

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    Scrapy 无法从 iframe 中抓取内容。而是向 iframe URL 发出请求,例如:

    def parse(self, response):
        yield(Request(url, callback = self.parse_iframe))
    
    def parse_iframe(self, response):
        #your code to scrape the content from iframe
    

    其中,url应该是iframe url,例如https://career-meridia....../jobs)

    编辑:

    用红色下划线部分替换 url。 Edit2: 确保您已通过 iframe url 所需的每个参数。否则你将一无所获。如果是 post 方法,则必须传递所有 post 参数。

    【讨论】:

    • 如果我想获得环境服务助手,普通的 xpath 可以吗?
    • 如果您收到对该子 iframe 的响应(如上所示发出请求),那肯定可以
    • 这里的代码很难阅读,你能用这段代码编辑你的问题吗?谢谢
    • 你必须用上面的值 iframe src 替换 url。
    • iframe 源代码?对不起,我真的不明白。我尝试将 url 更改为 response.url。它显示输出但不正确。
    【解决方案2】:

    我就是这样做的。先获取 iframe url,然后再对其调用 parse。

    urls = response.css('iframe::attr(src)').extract()
    for url in urls :
            yield scrapy.Request(url....)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-02
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2014-07-16
      • 2016-04-08
      相关资源
      最近更新 更多