Xpath 我的教授

Xpath 我的教授,xpath,scrapy,Xpath,Scrapy,我是一个新手,已经花了很多时间在这个简单的程序上,但我不明白。我使用chrome来检查这个页面中所有教授的链接的x路径,并使用控制台来测试xpath。当我将“正确的xpath”放在爬行器中时,它将不再工作,链接大小返回0“我现在很困惑。有人能帮我吗 import scrapy from scraper.items import ScraperItem from scrapy.contrib.spiders import Rule from scrapy.contrib.linkextracto

我是一个新手,已经花了很多时间在这个简单的程序上,但我不明白。我使用chrome来检查这个页面中所有教授的链接的x路径,并使用控制台来测试xpath。当我将“正确的xpath”放在爬行器中时,它将不再工作,链接大小返回0“我现在很困惑。有人能帮我吗

import scrapy

from scraper.items import ScraperItem
from scrapy.contrib.spiders import Rule
from scrapy.contrib.linkextractors import LinkExtractor


class scraperSpider(scrapy.Spider):
    name = "scraper"
    allowed_domains = ["www.ratemyprofessors.com"]
    start_urls = [
    "http://www.ratemyprofessors.com/search.jsp?queryoption=TEACHER&queryBy=schoolDetails&schoolID=1584&schoolName=Utah+Valley+University&dept=Accounting"
    ]



    def parse(self, response):
        # professors = []

        # create array of profile links
        profiles = response.xpath('//*[@id="mainContent"]/div[1]/div/div[5]/ul/li/a/@href').extract()
        print " size of profiles a " , len(profiles)
        for link in profiles:
            print link

是xpath,但是请注意,该页面正在生成格式不正确的xtml,因此,如果scrapy无法返回结果,我不会感到惊讶。

问题在于该网页使用JavaScript。当您在浏览器中打开url时,JavaScript代码由浏览器执行,从而生成配置文件列表

下面的表达式显示,默认情况下,Scrapy不执行JavaScript,因为它不包含JavaScript引擎

//div[@class='result-list']/ul
结果为空列表:

<ul id="blog-item-list">

</ul>


您应该查看一个无头浏览器(PhantomJS等),它将执行JavaScript。通过,Scrapy提供了自己的无头浏览器,可以轻松地与'scrapyjs.SplashMiddleware'下载中间件集成


谢谢您的帮助。我尝试了//div[@class='result-list']/ul/li/a/@href作为xpath,但仍然无法返回任何结果。正如您所说,该页面的格式不正确,因此没有办法通过scrapy来解决?我对scrapy了解得不够多,您可以尝试清理该页面(通过正则表达式或其他服务)然后它应该可以工作,但是如果你直接使用它,我不相信scrapy(或者任何xpath处理器)会成功。
<ul id="blog-item-list">

</ul>