xpath не может распознать предикат для тега - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь использовать 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.Не уверен, почему ...

PS.Я в основном пытаюсь вычеркнуть курс и их информацию из https://hrsa.cunyfirst.cuny.edu/psc/cnyhcprd/GUEST/HRMS/c/COMMUNITY_ACCESS.CLASS_SEARCH.GBL?FolderPath=PORTAL_ROOT_OBJECT.HC_CLASS_SEARCH_GBL&IsFolder=false&IgnoreParamTempl=FolderPath%252cIsFolder&PortalActualURL=https%3a%2f%2fhrsa.cunyfirst.cuny.edu%2fpsc%2fcnyhcprd%2fGUEST%2fHRMS%2fc%2fCOMMUNITY_ACCESS.CLASS_SEARCH.GBL&PortalContentURL=https%3a%2f%2fhrsa.cunyfirst.cuny.edu%2fpsc%2fcnyhcprd%2fGUEST%2fHRMS%2fc%2fCOMMUNITY_ACCESS.CLASS_SEARCH.GBL&PortalContentProvider=HRMS&PortalCRefLabel=Class%20Search&PortalRegistryName=GUEST&PortalServletURI=https%3a%2f%2fhome.cunyfirst.cuny.edu%2fpsp%2fcnyepprd%2f&PortalURI=https%3a%2f%2fhome.cunyfirst.cuny.edu%2fpsc%2fcnyepprd%2f&PortalHostNode=ENTP&NoCrumbs=yes с примененным фильтром: Kingsborough CC, осень 18, BIO

Спасибо!

1 Ответ

0 голосов
/ 02 июня 2018

Хорошо ... Я посетил веб-сайт, который вы указали в описании вопроса, я использовал проверку элементов и искал "MTG_CLASSNAME" и получил 0 совпадений ...

Так что я дам вам несколькоинструменты:

  • В вашем файле settings.py установите:

    LOG_FILE = "log.txt"

    LOG_STDOUT = True

    затем напечатайте тело ответа (response.body), где вы должны (в начале функции parse_page в этом случае), и найдите его в log.txt

  • Проверьте, есть ли то, что выищите.

  • Если есть, используйте этот https://www.freeformatter.com/xpath-tester.html (или аналогичный), чтобы проверить свой оператор xpath.

Кроме того, измените for section in response.xpath("//a[contains(@name,'MTG_CLASS_NBR')]"): на for section in response.xpath("//a[contains(@name,'MTG_CLASS_NBR')]").extract():, это приведет к ошибке при получении данных, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...