Web scraping “类”下不返回结果的刮码;用“U rep”发布“U block hentry”;

Web scraping “类”下不返回结果的刮码;用“U rep”发布“U block hentry”;,web-scraping,scrapy,web-crawler,Web Scraping,Scrapy,Web Crawler,我是一个非常新的网页抓取,并试图取消一个例子。我在scrapy中使用以下代码: items.py文件 from scrapy.item import Item, Field class StackoverflowItem(Item): title = Field() pass 和test.py from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector class

我是一个非常新的网页抓取,并试图取消一个例子。我在scrapy中使用以下代码: items.py文件

 from scrapy.item import Item, Field

 class StackoverflowItem(Item):
    title = Field()
    pass
和test.py

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

class MySpider(BaseSpider):
    name = "stackspider"
    allowed_domains = ["http://www.toytowngermany.com"]
    start_urls = ["http://www.toytowngermany.com/forum/index.php?showtopic=249843"]

    def parse(self,response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//div[contains(@class, "post_block hentry  with_rep")] /div[@class="post_wrap"]')
       for sites in sites:
           title = sites.select('div[@class="post_body"]/div[@class="post entry-content"]/text()').extract()
       print title
这只是一个示例代码,我想在“post_block hentry with_rep”类下收集所有信息。为了进行测试,我尝试运行上面的代码,但没有给出任何结果。你能建议我在xpath中犯了什么错误吗


谢谢

我认为主要的问题是
post\u body
div不是
post\u块
子对象的直接子对象-中间还有另一个div

试着这样做:

class MySpider(Spider):
    name = "stackspider"
    allowed_domains = ["http://www.toytowngermany.com"]
    start_urls = ["http://www.toytowngermany.com/forum/index.php?showtopic=249843"]

    def parse(self, response):
        sites = response.xpath('//div[contains(@class, "post_block hentry  with_rep")]/div[@class="post_wrap"]')
        for site in sites:
            title = site.xpath('div/div[@class="post_body"]/div[@class="post entry-content"]/text()').extract()
            print(title)

i、 e.只需在第二个路径选择器的开头添加一个额外的
div/
。或者,您可以添加
/
,这将允许在遇到
post_body
之前在层次结构中添加任何任意元素。

这是因为当您使用hxs进行选择时,由于div层次结构将被中断,您在末尾遗漏了一个
“/”

sites = hxs.select('//div[contains(@class, "post_block hentry  with_rep")] /div[@class="post_wrap"]/')
或者第二个选项在选择的开始处包含它

 title = sites.select('//div[@class="post_body"]/div[@class="post entry-content"]/text()').extract()

希望这两种方法中的一种能解决您的问题:)

谢谢,我现在明白了。