Scrapy:从两种不同类型的帖子中提取网络链接

时间:2016-04-05 16:34:18

标签: scrapy-spider

目标网页为here,其中有两种类型的帖子:

内部帖子的网络链接位于以下HTML代码中:

<a class="ga_job" href="/jobseeker/job/26930563/blablabla">

外部帖子的网络链接使用不同的HTML代码:

<a class="ga_job" onclick="window.open('http://www.indeed.com/rc/blablalbla','_blank');return false;" href="#"> 

我想要实现的是:如果@href包含合法的网络链接(用于内部帖子),我将使用以下代码来获取网络链接:

il.add_xpath('web_url', 'concat("http://careers.pathologyjobstoday.org", .//a[@class="ga_job"]/@href)')

如果@href仅包含&#34;#&#34; (对于外部帖子),我将使用以下代码进行网络链接:

il.add_xpath('web_url', 'substring-before(substring-after(.//a[@class="ga_job"]/@onclick, "("),"&qd=")')

我尝试了以下...其他代码,如下所示:

for site in sites:
        il = CAPjobsItemLoader(response=response, selector=site)
        il.add_xpath('web_url', './/a[@class="ga_job"]/@href')   #Get the @href
        HREF_value = il.get_collected_values('web_url')[0]
        if '#' in HREF_value:
            il.add_xpath('web_url', 'substring-before(substring-after(.//a[@class="ga_job"]/@onclick, "("),"&qd=")')
        else:
            il.add_xpath('web_url', 'concat("http://careers.pathologyjobstoday.org", .//a[@class="ga_job"]/@href)') 

        yield il.load_item()

我为web_url获得的结果只是@href(内部帖子的网络链接或外部帖子的#&#39;)。 if ... else命令不起作用。

1 个答案:

答案 0 :(得分:0)

我的问题可以通过一起使用两个属性来解决:

il.add_xpath('web_url', 'substring-before(substring-after(.//a[@class="ga_job" and @href="#"]/@onclick, "(\'"),"&qd=")')
il.add_xpath('web_url', 'concat("http://careers.pathologyjobstoday.org", .//a[@class="ga_job"]/@href)')