初学scrapy爬虫的一些坑

1、如果有代码无误却爬取不了的状况,那么一个可能是网络不好,另一个可能就是服务器拒绝响应,这种的话一般可以配置一下请求头,伪装成浏览器的爬虫。

例如我们可以在setting.py中,添加以下代码:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74'

 如图所示:

2、最容易出错的地方就是爬虫类的编写。该文件也是最主要的

例如,以下是我爬取豆瓣书籍top250的一个项目文件bookspider.py

import scrapy
from doubanbook.items import DoubanbookItem

class BookspiderSpider(scrapy.Spider):
    name = "bookspider"
    allowed_domains = ["book.douban.com"]
    start_urls = ["https://book.douban.com/top250"]

    def parse(self, response):
        div_selector = response.xpath("//div[@class='indent']/table")#已debug,长度为25
        print(len(div_selector))
        for one_selector in div_selector:


            #标题
            title = one_selector.xpath("tr[@class='item']/td/div[@class='pl2']/a/text()").extract()[0]

            #主要信息
            detail =one_selector.xpath("tr[@class='item']/td/p[@class='pl']/text()").extract()[0]

            #评分
            score = one_selector.xpath("tr[@class='item']/td/div[@class='star clearfix']/span[@class='rating_nums']/text()").extract()[0]

            #异常处理机制,如果有summaries可以爬,就爬;如果没有,就直接视为空格录入csv文件
            try:
                #总结
                summaries = one_selector.xpath("tr[@class='item']/td/p/span[@class='inq']/text()").extract()[0]
                if summaries:
                    book = DoubanbookItem(title=title,detail=detail,score=score, summaries=summaries)
                    yield book
                # print(summaries)

            except Exception :
                book = DoubanbookItem(title=title, detail=detail, score=score, summaries=" ")
                yield book

        #翻页(如果有的话)
        try:
            next_url = response.xpath("//div[@class='paginator']/span[@class='next']/a/@href").extract()[0]
            if next_url:
                yield scrapy.Request(url=next_url, callback=self.parse)


        except Exception as e:
            self.logger.error(f"An error occurred: {e}")





(1)首先就是response对象中xpath属性规则的编写,一定要一层层往里定位,不要跳层,哪怕写错一个符号,都可能无法爬取【地址都给错了,爬虫根本就找不到,你说怎么爬】

(2)还有一个很重要的,也是我在该项目遇到的问题。例如这250本书,有一些是没有写总结信息的,所以一旦爬到该本书,就会报错,爬虫就不再爬了。所以要加入异常处理机制

【try-except Exception】,当爬到某本书发现该书缺了某个信息的时候,就将该信息记为空进行储存,然后再继续爬下一本。通过异常处理机制,我也顺利爬取成功.

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值