从主页面提取新页面中的文本

2024-09-30 22:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从我从“主页”提取的链接中获取文本

这个爬虫程序从“主页”获取所有的te链接,然后抓取所有这些链接并从中获取文本。在

我希望你能理解我的意思,如果不问我那我尽量解释得更详细

编辑:

所以我读了更多关于scrapy的文章,找到了这个页面https://scrapy.readthedocs.org/en/latest/topics/spiders.html?highlight=crawlspider#crawling-rules 我读了“网站地图蜘蛛”,我想这可以是蜘蛛,我需要使用这个问题

蜘蛛文件*编辑*

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

from craigslist_randstad.items import CraigslistRandstadItem

class MySpider(BaseSpider):
    name = "craig"
    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)
    link = 

    for link in sel.xpath("//div[@class='search-result af_panelGroupLayout']"):
        link = sel.xpath(".//a[contains(@class, 'outer-read-more-link')]/@href").extract()
        yield Request(link, callback=self.parse)

    print len(link)


    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

项目文件

^{pr2}$

Tags: textfromimport链接responselink主页item
2条回答

从默认的parse()函数开始,每个spider函数都可以产生一些Item/s和/或{a2}的组合,请注意,如果要返回多个项/请求,则必须yield,而不是{}

scrapy负责将项目发送到pipelines,并调用这些请求

注意在创建请求时应该给出的callback参数,这是scray将随响应调用的函数。在

最后,scrapy跟踪请求并确保它们不会被多次调用,除非您在请求上设置dont_filter=True。在

Guy给了你一个很好的解释,下面是一个例子,可以提取一些数据,指导你进行更复杂的报废:

首先,创建项目并访问其目录:

scrapy startproject craig && cd craig

其次,编辑文件items.py

^{pr2}$

第三,创造蜘蛛。你可以用最基本的任务来完成这个简单的任务:

scrapy genspider -t basic craig_spider 'randstad.nl'

第四,编辑它,spiders/craig_spider.py

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

注意

links = hxs.select("//div[@class='search-result af_panelGroupLayout']")

提取链接及以后

links.select("//a[contains(@class, 'outer-read-more-link')]/@href")

没有什么意义,因为//a[...]将从根元素而不是从links子树中搜索所有锚定,所以我省略了这里的第一个搜索。在

还请注意,我执行了两个不同的xpath搜索,一个返回(yield)链接以再次解析(callback),另一个在信息页面中提取整个文本,创建项并返回它。在

运行方式如下:

scrapy crawl craig_spider -o craig.json -t json

这将创建一个json格式的文本文件,如下所示:

[{"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"},
...
]

最后一点说明:这个例子是用0.20版本的完成的。它更改用于提取数据的类。现在它被称为Selector。你必须把它翻译成一个较低的版本,但是阅读文档很容易。在

相关问题 更多 >