如何使用scrapy抓取多个页面? (两级)

时间:2014-07-25 11:10:24

标签: scrapy

在我的网站上,我创建了两个简单的页面: 这是他们的第一个html脚本:

test1.html:

<head>
<title>test1</title>
</head>
<body>
<a href="test2.html" onclick="javascript:return xt_click(this, "C", "1", "Product", "N");" indepth="true">
<span>cool</span></a>
</body></html>

test2.html:

<head>
<title>test2</title>
</head>
<body></body></html>

我想在两个页面的标题标签中抓取文字。这是&#34; test1&#34;和&#34; test2&#34;。 但我是scrapy的新手我只会在第一页上刮刮。 我的scrapy脚本:

from scrapy.spider import Spider
from scrapy.selector import Selector

from testscrapy1.items import Website

class DmozSpider(Spider):
name = "bill"
allowed_domains = ["http://exemple.com"]
start_urls = [
    "http://www.exemple.com/test1.html"
]


def parse(self, response):

    sel = Selector(response)
    sites = sel.xpath('//head')
    items = []

    for site in sites:
        item = Website()

        item['title'] = site.xpath('//title/text()').extract()

        items.append(item)

    return items

如何通过onclik? 以及如何成功抓取第二页标题标签的文本? 先感谢您 STEF

1 个答案:

答案 0 :(得分:0)

要在代码中使用多个函数,发送多个请求并解析它们,您将需要:1)产生而不是返回,2)回调。

示例:

def parse(self,response):
    for site in response.xpath('//head'):
        item = Website()
        item['title'] = site.xpath('//title/text()').extract()
        yield item
    yield scrapy.Request(url="http://www.domain.com", callback=self.other_function)

def other_function(self,response):
    for other_thing in response.xpath('//this_xpath')
        item = Website()
        item['title'] = other_thing.xpath('//this/and/that').extract()
        yield item

您无法使用scrapy解析javascript,但您可以了解javascript的功能并执行相同的操作:http://doc.scrapy.org/en/latest/topics/firebug.html