Python:我可以使用Chrome';s";“检查元件”;XPath创建工具作为剪贴蜘蛛XPath?

Python:我可以使用Chrome';s";“检查元件”;XPath创建工具作为剪贴蜘蛛XPath?,python,google-chrome,xpath,web-crawler,scrapy,Python,Google Chrome,Xpath,Web Crawler,Scrapy,我的蜘蛛类如下: class MySpider(BaseSpider): name = "dropzone" allowed_domains = ["dropzone.com"] start_urls = ["http://www.dropzone.com/cgi-bin/forum/gforum.cgi?post=4724043"] def parse(self, response): hxs = HtmlXPathSelecto

我的蜘蛛类如下:

class MySpider(BaseSpider):
    name =  "dropzone"
    allowed_domains = ["dropzone.com"]      
    start_urls = ["http://www.dropzone.com/cgi-bin/forum/gforum.cgi?post=4724043"]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        reply = response.xpath('//*[@id="wrapper"]/div/div/table/tbody/tr/td/div/div/center/table/tbody/tr/td/table/tbody/tr/td/font/table/tbody/tr/td/table/tbody/tr/td/font/b')
        dates = response.xpath('//*[@id="wrapper"]/div/div/table/tbody/tr/td/div/div/center/table/tbody/tr/td/table/tbody/tr/td/font/table/tbody/tr/td/font/small')
        items = []
        for posts, day in zip(reply, dates):
            item = DozenItem()
            item["Reply"] = posts.re('/text()')
            item["Date"] = day.re('/text()')
            items.append(item)
        return items
我在源代码中特别选择了该项,右键单击,选择“复制XPath”,然后将其粘贴到我的XPath中

但是。。。。。当然没用了。我的外壳没有说它爬网或刮取了任何东西,我的CSV是空的

我最初像往常一样创建了自己的XPath,但它也不起作用,Chrome选项引起了我的兴趣。通常我在XPath中只包含3或4个标记。这是否适用于下面提供的html

该网站是一个论坛网站,我只想有一个自我更新的刮板,抓取一个特定的帖子回复原始帖子,导出日期/帖子

该职位:

http://www.dropzone.com/cgi-bin/forum/gforum.cgi?post=4724043
我认为posts date HTML提供了足够的标记:

<br>
<br>
<!-- FORUM MINI PROFILE -->
Registered: Sep 6, 2012<BR>
Posts: 1850<BR><BR>
</small></font>
 Apr&nbsp;26,&nbsp;2015,&nbsp;7:51&nbsp;AM
<br>
    Post #2 of 11
 (195 views)
<br>
<a href="/cgi-bin/forum/gforum.cgi?post=4724045#4724045">Shortcut</a>
<br>
<img src="http://www.dropzone.com/graphics/forum/clear_shim.gif" width="180" height="1">
</font>
</td>


注册日期:2012年9月6日
职位:1850 2015年4月26日上午7:51
第2次,共11次 (195个视图)

并且帖子的主题本身指定它是一个带有“Re:”的回复,这将从爬网中删除原始帖子:

<td valign="top" width="100%" style="border-left: 1px solid #CCD2DE">
<!-- Adult Content Filter -->
<table border=0 width="100%">
<tr>
<td valign="top" align="left">
<font face="Verdana,Arial,Helvetica" size=2 color="#212126">
<b>
 Re: [pleasedtomeet] Skydiving with tinnitus?
</b>
 [<small><a href="#4724043">In reply to</a></small>]
</font>
</td>

Re:[请告诉我]有耳鸣的跳伞?
[]

在大多数情况下,出于以下基本原因,您需要稍微调整浏览器返回的Xpath:

  • 可以在页面通过JavaScript加载后更改HTML
  • HTML可以由浏览器本身更改
  • 它们严重依赖于节点位置,并包含许多不必要的元素,忽略了更有效且允许更改的选择路径
  • 例如,最常见的浏览器功能是“坏”Xpath,它是由浏览器自动添加到HTML的,这将:

    <table><tr>...</tr></table>
    
    。。。
    
    为此:

    <table><tbody><tr>...</tr></tbody></table>
    
    。。。
    
    由于在浏览器中看到的HTML与从服务器获得的原始HTML之间存在许多其他差异,因此在spider中实现Xpath元素之前,应该使用
    scrapy shell
    手动验证Xpath元素


    您可以在中找到有关将开发人员工具与Scrapy结合使用的更多信息。

    在大多数情况下,您需要稍微调整浏览器返回的Xpath,原因如下:

  • 可以在页面通过JavaScript加载后更改HTML
  • HTML可以由浏览器本身更改
  • 它们严重依赖于节点位置,并包含许多不必要的元素,忽略了更有效且允许更改的选择路径
  • 例如,最常见的浏览器特性是浏览器自动添加到HTML中的“坏”Xpath,将此功能转为:

    <table><tr>...</tr></table>
    
    。。。
    
    为此:

    <table><tbody><tr>...</tr></tbody></table>
    
    。。。
    
    由于在浏览器中看到的HTML与从服务器获得的原始HTML之间存在许多其他差异,因此在spider中实现Xpath元素之前,应该使用
    scrapy shell
    手动验证Xpath元素


    您可以在.

    中找到有关使用开发人员工具和Scrapy的更多信息。毫无疑问,不接受浏览器返回的此类路径表达式的第三个原因是,它们严重依赖于节点的位置或ID,从人的角度来看,这可能不是理想的XPath表达式,我可以同意的位置-答案已更新,但我没有找到比通过ID更可靠的方法来选择节点。你能详细说明一下吗?这当然是识别单个节点的最佳方法。但是,如果路径表达式要返回一组具有公共属性的节点,则文档中不太明显的关系很重要,并且(当前)浏览器工具无法自动推断这些关系+我同意这一点,这就是我从不使用自动生成的Xpath的主要原因;它不适合任何实际用例。毫无疑问,不接受浏览器返回的此类路径表达式的第三个原因是,它们严重依赖于节点的位置或ID,从人类的角度来看,这可能不是理想的XPath表达式。好吧,我可以同意的位置-答案更新,但是我找不到比通过ID更可靠的方法来选择节点。你能详细说明一下吗?这当然是识别单个节点的最佳方法。但是,如果路径表达式要返回一组具有公共属性的节点,则文档中不太明显的关系很重要,并且(当前)浏览器工具无法自动推断这些关系+我同意这一点,这就是我从不使用自动生成的Xpath的主要原因;它不适合任何实际的用例。