<p><a href="https://stackoverflow.com/users/41576/guy">Guy</a>给了你一个很好的解释,下面是一个例子,可以提取一些数据,指导你进行更复杂的报废:</p>
<p>首先,创建项目并访问其目录:</p>
<pre><code>scrapy startproject craig && cd craig
</code></pre>
<p>其次,编辑文件<code>items.py</code>:</p>
^{pr2}$
<p>第三,创造蜘蛛。你可以用最基本的任务来完成这个简单的任务:</p>
<pre><code>scrapy genspider -t basic craig_spider 'randstad.nl'
</code></pre>
<p>第四,编辑它,<code>spiders/craig_spider.py</code>:</p>
<pre><code>from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from craig.items import CraigItem
from scrapy.http import Request
class CraigSpiderSpider(BaseSpider):
name = "craig_spider"
allowed_domains = ["randstad.nl"]
start_urls = (
"http://www.randstad.nl/mwp2/faces/baanZoeken?afstand=10&pagina=1&_adf.ctrl-state=sb0riset7_4&sc=0&filters=vakgebied!5626&_afrLoop=",
)
def parse(self, response):
sel = Selector(response)
for link in sel.xpath("//a[contains(@class, 'outer-read-more-link')]/@href").extract():
yield Request(link, callback=self.parse)
text_list = sel.xpath('//div[@id="basePage:page:twoColumn:r2:0:functieOmschrijvingPanel::content"]/text()').extract()
if text_list:
text = '\n'.join(text_list)
item = CraigItem()
item['link'] = response.url
item['title'] = text
yield item
</code></pre>
<p>注意</p>
<pre><code>links = hxs.select("//div[@class='search-result af_panelGroupLayout']")
</code></pre>
<p>提取链接及以后</p>
<pre><code>links.select("//a[contains(@class, 'outer-read-more-link')]/@href")
</code></pre>
<p>没有什么意义,因为<code>//a[...]</code>将从根元素而不是从<code>links</code>子树中搜索所有锚定,所以我省略了这里的第一个搜索。在</p>
<p>还请注意,我执行了两个不同的<code>xpath</code>搜索,一个返回(<code>yield</code>)链接以再次解析(<code>callback</code>),另一个在信息页面中提取整个文本,创建项并返回它。在</p>
<p>运行方式如下:</p>
<pre><code>scrapy crawl craig_spider -o craig.json -t json
</code></pre>
<p>这将创建一个<code>json</code>格式的文本文件,如下所示:</p>
<pre><code>[{"link": "http://www.randstad.nl/vacatures/1486457/klantadviseur-glasvezel-tijdelijk-%28m-v%29", "title": "Wil je per direct aan de slag in een afwisselend project? Heb jij ervaring in de glasvezel- of ICT-branche? Werk jij graag in een hectische, dynamische omgeving?\nDan hebben wij een leuke tijdelijke baan voor jou! \nDeze snelgroeiende en onafhankelijke serviceprovider levert een breed scala aan diensten zoals internet, televisie en telefonie op het glasvezelnetwerk . \nIn deze veelzijdige functie ben je verantwoordelijk voor een zo positief mogelijke klantbeleving. Je zorgt voor een proactieve, deskundige advisering aan klanten over diensten en de levering ervan. Je bent verantwoordelijk voor de Backoffice Support van het Klant Contact Center, je denkt actief mee over verbeteringen in communicatie, applicaties en de manier van werken binnen het bedrijf. Je ziet kansen in alle dagelijkse handelingen om de commercie te verhogen op de afdeling.\nWat ga je doen?\nBeantwoorden van tweede- en derdelijns vragen van klanten en externe partners, \nBewaken van procedures voor correcte administratieve afhandeling,\nVerwerken van orders en uitsturen hiervan per post en e-mail,\nBijdragen aan optimaliseren primaire klantprocessen.\nWie ben jij?\nJe hebt een opleiding afgerond op MBO+/HBO niveau, of bent studerend aan HBO of WO,\nMinimaal 1 jaar inbound contactcenterervaring,\nJe hebt een perfecte beheersing van de Nederlandse taal in woord en geschrift,\nErvaring met het Office pakket,\nWerkervaring in glasvezel- en/of ICT-branche is een grote pr\u00e9\nVerder ben je:\nBetrokken, betrouwbaar, transparant en innovatief,\nZelfstandig,\nKlantgericht en commercieel,\nJe vindt het leuk om klanten te enthousiasmeren,\nJe bent een oplossingsgerichte teamspeler en je hebt affiniteit met ICT.\nZie jij jezelf als de perfecte kandidaat voor deze baan? Dan horen we graag vandaag nog van je! Reageer direct via de solliciteer button met je Cv en vertel ons waarom jij de geschikte kandidaat bent voor deze functie!"},
{"link": "http://www.randstad.nl/vacatures/1360086/embedded-software-design-engineer-electric-controls-%28m-v%29", "title": "Ben jij degene die nieuwe dingen bedenkt? Doe je dat het liefst in een team van specialisten? En vind je het leuk bezig te zijn in het werkveld van elektrische installaties voor (railgebonden) voertuigen? lees dan snel verder...\nWat ga jij doen?\nOpstellen van systeem-, product- en module specificaties conform bestek, normen en voorschriften\nHet opstellen van softwarespecificaties en het ontwerp van de software\nFormuleren en uitvoeren van testplannen voor afname beproevingen\nRisicomanagement door toepassing van FMEA en FTA\nOpstellen van ontwerp- en gebruikers documentatie\nRapporteren aan de projectleider\n \nWat verwachten wij van jou?\nMinimaal een HBO-opleiding (Bij voorkeur WO), richting elektrotechniek, embedded systems of gelijkwaardig vakgebied\nRelevante ervaring met het toepassen van normen en richtlijnen voor kwaliteit en veiligheid\nUitstekende communicatieve vaardigheden\nSterk ontwikkeld analytisch denkvermogen\nUitstekende beheersing van de Engels en Nederlandse taal is noodzakelijk\nKennis van en ervaring met elektrische installaties voor railgebonden voertuigen\nKennis van en ervaring met CAN, MVB, C/C++, .NET/C#, FPGA, real-time OS, TCMS, CMMI, EN61508 SIL3, EN50128, FMEA en Matlab/Simulink\nHerken jij jezelf in dit profiel en heb jeinmiddels een aantal jaar werkervaring in jouw vakgebied? Ben jij toe aan de volgende stap in je carriere reageer dan snel via 06-15087716 of mail bas.kooter.rnl@nl.randstad.com"},
...
]
</code></pre>
<p><strong>最后一点说明</strong>:这个例子是用<code>0.20</code>版本的<a href="/questions/tagged/scrapy" class="post-tag" title="show questions tagged 'scrapy'" rel="tag">scrapy</a>完成的。它更改用于提取数据的类。现在它被称为<code>Selector</code>。你必须把它翻译成一个较低的版本,但是阅读文档很容易。在</p>