<p>诚然,使用<code>Scrapy</code>来实现这一点有点太强大了。我个人会把<code>requests</code>与<code>lxml</code>或{<cd4>}结合使用。在</p>
<p>无论如何,这里有一个你的代码的工作版本。我没有费心清理结果。这取决于你。在</p>
<pre><code>from scrapy.contrib.spiders import CrawlSpider
from scrapy.selector import Selector
from scrapy import Item, Field
from scrapy.http import Request
import urlparse
class Eb5Item(Item):
name = Field()
email = Field()
name = Field()
description = Field()
phone = Field()
url = Field()
class Eb5Spider(CrawlSpider):
name = 'eb5'
allowed_domains = ["eb5info.com"]
start_urls = ["http://eb5info.com/regional-centers/"]
def parse(self, response):
hxs = Selector(response)
sites = hxs.xpath('//ul/li/a/@href')
for site in sites:
yield Request(urlparse.urljoin("http://www.eb5info.com", site.extract()), callback=self.parse_item)
def parse_item(self, response):
hxs = Selector(response)
item = Eb5Item()
item['url'] = hxs.xpath("//dd/a/@href").extract()
# item[blah]...
print item['url']
return item
</code></pre>
<p>它的工作方式是<code>parse</code>从<code>start_urls</code>获取链接。因为只有一个页面(在<code>start_urls</code>中的同一个URL)包含所有链接,所以不需要使用<code>Rule</code>来跟踪其他页面。在</p>
<p>我们重写<code>parse</code>以获取来自所述页面的链接,然后使用<code>Request</code>向{<cd11>}发出回调。这意味着对于<code>parse</code>找到的每个链接,我们“进入”该链接并在其中执行<code>parse_item</code>。在</p>
<p>这一级别的刮擦在技术上很简单,并不真正符合爬网的条件,这意味着{<cd14>}在这个级别上是过度杀戮的。在</p>
<p>请注意,我使用的是scray的最新版本,因此有些类和方法与您的不同。在</p>