Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xpath无法识别标记的谓词_Xpath_Web Scraping_Scrapy - Fatal编程技术网

xpath无法识别标记的谓词

xpath无法识别标记的谓词,xpath,web-scraping,scrapy,Xpath,Web Scraping,Scrapy,我尝试使用scrapy xpath来刮取页面,但当我使用for循环时,它似乎无法捕获带有谓词的标记, #此包将包含Scrapy项目的爬行器 from cunyfirst.items import CunyfirstSectionItem import scrapy import json class CunyfristsectionSpider(scrapy.Spider): name = "cunyfirst-section-spider" start_urls = ["file:///Us

我尝试使用scrapy xpath来刮取页面,但当我使用for循环时,它似乎无法捕获带有谓词的标记, #此包将包含Scrapy项目的爬行器

from cunyfirst.items import CunyfirstSectionItem
import scrapy
import json

class CunyfristsectionSpider(scrapy.Spider):
name = "cunyfirst-section-spider"
start_urls = ["file:///Users/haowang/Desktop/section.htm"]

def parse(self, response):
    url = response.url
    yield scrapy.Request(url, self.parse_page)

def parse_page(self, response):

    n = -1
    for section in response.xpath("//a[contains(@name,'MTG_CLASS_NBR')]"):
        print(response.xpath("//a[@name ='MTG_CLASSNAME$10']/text()"))

        n += 1

        class_num = section.xpath('text()').extract_first()
        # print(class_num)
        classname = "MTG_CLASSNAME$" + str(n)
        date = "MTG_DAYTIME$" + str(n)
        instr = "MTG_INSTR$" + str(n)
        print(classname)

        class_name = response.xpath("//a[@name = classname]/text()")
我正在寻找一个名为“MTG_CLASSNAME$”+str(n)的标记,n为0,1,2…,我从xpath查询中得到空输出。不知道为什么

附言。 我基本上是在试图从中获取课程和他们的信息 使用过滤器:金斯堡CC,18号秋季,生物


谢谢

嗯。。。我已经访问了你在问题描述中加入的网站,我使用元素检查并搜索“MTG_CLASSNAME”,我得到了0个匹配项

所以我会给你一些工具:

  • 在settings.py中,设置:

    LOG\u FILE=“LOG.txt”

    LOG_STDOUT=真

    然后打印响应正文(response.body),并在log.txt中搜索它

  • 检查那里是否有你要找的东西

  • 如果有,请使用此( 或类似的)来检查xpath语句
此外,更改response.xpath(//a[contains(@name,'MTG\u CLASS\u NBR'))中的节的

通过
for response.xpath(“//a[contains(@name,'MTG_CLASS_NBR'))”).extract():
,这将在您获取要查找的数据时引发错误。

谢谢,您是否已将筛选器放入Kingsborough CC,fall 18,BIO?它将显示课程表,然后使用inspect,您可以找到模式MTG_类名或其他内容。谢谢我查看了日志文件,找到了我要查找的模式。最奇怪的是,我可以使用response.xpath(“//a[@name='MTG\u CLASS\u NBR$10']]/text()”)获得正确的数据,但是当我将其放入for循环时,它就不再工作了好的,我得到了应用了过滤器的代码。。。在“file:///Users/haowang/Desktop/section.htm“是否存在包含所需数据的html?您是否已尝试通过response.xpath(//a[contains(@name,'MTG_CLASS_NBR')])更改response.xpath(//a[contains(@name,'MTG_CLASS_NBR')))))].extract()来更改response.xpath(//a[contains(@name,'MTG_CLASS_NBR'))?