scrapy分页抓取网页(调试自己的爬虫方法介绍(二)-乐题库)

优采云 发布时间: 2022-02-28 21:18

  scrapy分页抓取网页(调试自己的爬虫方法介绍(二)-乐题库)

  博客地址:woodrobot.me

  前言

  春节假期我的家乡没有互联网,所以最近没有更新。这周我加班加点,抽空更新一篇文章。我们在编写爬虫的时候,经常需要修改xapth规则来获取需要的数据,而Scrapy的爬虫一般都是从命令行启动的。我们如何调试它?下面我将介绍两种我常用的方法。

  工具和环境语言:python 2.7 IDE:Pycharm 浏览器:Chrome Crawler 框架:Scrapy 1.2.1 Body Method 1

  这是通过 scrapy.shell.inspect_response 函数实现的。以上一篇教程中的爬虫为例:

  # -*- coding: utf-8 -*-

# @Time : 2017/1/7 17:04

# @Author : woodenrobot

from scrapy import Request

from scrapy.spiders import Spider

from scrapyspider.items import DoubanMovieItem

class DoubanMovieTop250Spider(Spider):

name = 'douban_movie_top250'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/'

'537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safar'

'i/537.36',

}

def start_requests(self):

url = 'https://movie.douban.com/top250'

yield Request(url, headers=self.headers)

def parse(self, response):

# 命令行调试代码

from scrapy.shell import inspect_response

inspect_response(response, self)

item = DoubanMovieItem()

movies = response.xpath('//ol[@class="grid_view"]/li')

for movie in movies:

item['ranking'] = movie.xpath(

'.//div[@class="pic"]/em/text()').extract()[0]

item['movie_name'] = movie.xpath(

'.//div[@class="hd"]/a/span[1]/text()').extract()[0]

item['score'] = movie.xpath(

'.//div[@class="star"]/span[@class="rating_num"]/text()'

).extract()[0]

item['score_num'] = movie.xpath(

'.//div[@class="star"]/span/text()').re(ur'(\d+)人评价')[0]

yield item

next_url = response.xpath('//span[@class="next"]/a/@href').extract()

if next_url:

next_url = 'https://movie.douban.com/top250' + next_url[0]

yield Request(next_url, headers=self.headers)

  我们可以在下载网页源代码之前插入以上两行代码进行解析,命令行运行爬虫有以下效果:

  

  此时,我们可以在命令行中使用xpath规则对响应进行操作,提取出相应的信息:

  

  有时下载的网页的结构与您在浏览器中看到的不同。我们可以使用view(response)在浏览器中打开爬虫下载的网页源代码:

  

  在命令行输入view(response)后,默认浏览器会自动打开下载的网页源码。

  

  虽然scrapy本身就提供了这个方法让我们调试自己的爬虫,但是这个方法有很大的局限性。如果能使用pycharm的Debug功能进行调试就好了。下面我给大家介绍使用pycharm调试自​​己的爬虫。

  方法二

  首先在与setting.py相同的目录下创建run.py文件。

  

  编写以下代码:

  # -*- coding: utf-8 -*-

# @Time : 2017/1/1 17:51

# @Author : woodenrobot

from scrapy import cmdline

name = 'douban_movie_top250'

cmd = 'scrapy crawl {0}'.format(name)

cmdline.execute(cmd.split())

  name 参数是蜘蛛的名字。

  然后在蜘蛛文件中设置断点。

  

  回到run.py文件,右键选择Debug。

  

  最后程序会在断点处暂停,我们可以查看对应的内容进行调试。

  

  结语

  这两种方法适用于不同的场景,但总的来说,方法2绝对好用。:)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线