scrapy爬虫爬取旅游问答网站,递归爬取下一页

class BusSpider(BaseSpider):
    #设置爬虫名称
    name = "xinlang"
    #设置起始URL列表
    start_urls = ["http://travel.sina.com.cn/list-wenda/all/5"]

    def parse(self, response):
        req = []
        hxs = HtmlXPathSelector(response)
        how=hxs.x('/html/body/div[5]/div[1]/div[2]/div[1]/a[5]/text()').extract()
        #print 'how many--',how[0].strip()
        if int(how[0].strip())!= int(5):
            #print 'not ==',how[0].strip()
            nn=hxs.x('/html/body/div[5]/div[1]/div[2]/div[1]/a[9]/@href').extract()
            #print '------',len(nn)
            n=Request(url="http://travel.sina.com.cn" + nn[0].strip(),callback=self.parse)
            yield n
        cat_urls =  hxs.x('/html/body/div[5]/div[1]/div[1]/ul/li/a/@href').extract()
        print 'cat_urls =', cat_urls
        for url in cat_urls:
            #构建新的URL
            new_url = "http://travel.sina.com.cn" + url
            print "[parse]new_url = %s" % (new_url)
            #创建对应的页面的Request对象,设定回调函数为parse_cat,利用parse_cat处理返回的页面
            r = Request(new_url, callback=self.parse_cat)
            yield r
        return


    def parse_cat(self, response):
        hxs = HtmlXPathSelector(response)
        title = hxs.x('//h1[@id="artibodyTitle"]/text()').extract()
        des= hxs.x('/html/body/div[5]/div[1]/div[1]/p/text()').extract()
        ans=hxs.x('/html/body/div[5]/div[1]/div[2]/ul/li/p/text()').extract()
#结果写入到记录的文件之中
        print "#####"
        global SUM
        SUM+=1
        fp = codecs.open('record'+str(SUM)+'.txt', 'w', 'utf-8') 
        if filter_tags(title[0].strip()):
            print 'title =',filter_tags(title[0].strip())
            fp.write(filter_tags(title[0].strip()))
            fp.write('\r\n')
        else:
            fp.write('&')
            fp.write('\r\n')
        if filter_tags(des[0].strip()):
            print 'des =',filter_tags(des[0].strip())
            fp.write(filter_tags(des[0].strip()))
            fp.write('\r\n')
        else:
            fp.write('&')
            fp.write('\r\n')
        a_num=0
        for ansl in ans:
            if filter_tags(ansl.strip()):
                a_num+=1
                an_two=filter_tags(ansl.strip())
                print 'ans =',an_two
                fp.write(an_two)
                fp.write('\r\n')
            else:
            	fp.write('&')
            	fp.write('\r\n')
        print "#####"
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Scrapy 爬取今日头条可以分为以下步骤: 1. 创建 Scrapy 项目 ``` scrapy startproject toutiao ``` 2. 创建一个 Spider 在 Scrapy 项目中,每个爬虫都是由一个 Spider 类来定义的。在 `spiders` 文件夹下创建一个 `toutiao_spider.py` 文件,并编写以下代码: ```python import scrapy class ToutiaoSpider(scrapy.Spider): name = "toutiao" start_urls = [ 'https://www.toutiao.com/ch/news_hot/', ] def parse(self, response): for article in response.css('div.card'): yield { 'title': article.css('div.title-box a::text').get(), 'url': article.css('div.title-box a::attr(href)').get(), 'source': article.css('a.lbtn.source::text').get(), 'time': article.css('span.time::text').get(), } next_page = response.css('a.next::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 在 Spider 中,我们首先指定了 Spider 的名称和起始 URL,然后定义了一个 `parse` 方法,用于解析响应并提取数据。在这个例子中,我们使用 CSS 选择器来提取文章的标题、URL、来源和发布时间,并将其作为字典类型的 item 返回。最后,我们通过在响应中查找“下一页”的链接来实现翻页,并使用 `response.follow` 方法来跟踪这些链接,最终递归调用 `parse` 方法。 3. 运行 Spider 完成 Spider 的编写后,我们可以在命令行中运行以下命令来启动爬虫: ``` scrapy crawl toutiao -o articles.csv ``` 此命令将运行名为 `toutiao` 的 Spider,并将结果输出到 `articles.csv` 文件中。您可以将此文件用于进一步的数据分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值