在scrapy中搜索html?

时间:2018-02-11 00:28:56

标签: python html xpath scrapy tags

是否可以使用for循环搜索与某个短语对应的标签文本。我一直在尝试创建这个循环,但并没有一直没有工作。任何帮助表示赞赏谢谢!这是我的代码:

    def parse_page(self, response):
        titles2 = response.xpath('//div[@id = "mainColumn"]/h1/text()').extract_first()
        year =  response.xpath('//div[@id = "mainColumn"]/h1/span/text()').extract()[0].strip()
        aud = response.xpath('//div[@id="scorePanel"]/div[2]')
        a_score = aud.xpath('./div[1]/a/div/div[2]/div[1]/span/text()').extract()
        a_count = aud.xpath('./div[2]/div[2]/text()').extract()
        c_score = response.xpath('//a[@id = "tomato_meter_link"]/span/span[1]/text()').extract()[0].strip()
        c_count = response.xpath('//div[@id = "scoreStats"]/div[3]/span[2]/text()').extract()[0].strip()
        info = response.xpath('//div[@class="panel-body content_body"]/ul')
        mp_rating = info.xpath('./li[1]/div[2]/text()').extract()[0].strip()
        genre = info.xpath('./li[2]/div[2]/a/text()').extract_first()
        date = info.xpath('./li[5]/div[2]/time/text()').extract_first()
        box = response.xpath('//section[@class = "panel panel-rt panel-box "]/div')
        actor1 = box.xpath('./div/div[1]/div/a/span/text()').extract()
        actor2 = box.xpath('./div/div[2]/div/a/span/text()').extract()
        actor3 = box.xpath('./div/div[3]/div/a/span/text()').extract_first()

        for x in info.xpath('//li'):
            if info.xpath("./li[x]/div[1][contains(text(), 'Box Office: ')/text()]]
                box_office = info.xpath('./li[x]/div[2]/text()')
            else if info.xpath('./li[x]/div[1]/text()').extract[0] == "Runtime: "):
                runtime = info.xpath('./li[x]/div[2]/time/text()')

2 个答案:

答案 0 :(得分:0)

您的for循环完全错误: 1.您正在使用info.但是从根

进行搜索
for x in info.xpath('.//li'):

2。 x是一个HTML节点元素,您可以这样使用它:

if x.xpath("./div[1][contains(., 'Box Office: ')]"):
    box_office = x.xpath('./div[2]/text()').extract_first()

答案 1 :(得分:0)

我认为你可能需要 re() re_first()来匹配某个词组。

例如:

            elif info.xpath('./li[x]/div[1]/text()').re_first('Runtime:') == "Runtime: "):
            runtime = info.xpath('./li[x]/div[2]/time/text()')

你需要修改你的for循环,因为变量x实际上是一个Selector而不是一个数字,所以这样使用它是不对的:li [x]。

最后一个答案中的gangabass对此提出了一个很好的观点。