python scrapy框架爬取豆瓣top250电影篇一明确目标&&爬虫编写

版权声明:zhiyu https://blog.csdn.net/ichglauben/article/details/82558731

1.明确目标

1.1在url上找到要爬取的信息
这里写图片描述
1.2.确定了信息,编写items文件

  1.    class DoubanItem(scrapy.Item):
  2.     # define the fields for your item here like:
  3.     # name = scrapy.Field()
  4.         serial_number = scrapy.Field()
  5.         movie_name = scrapy.Field()
  6.         introduce = scrapy.Field()
  7.         star = scrapy.Field()
  8.         evaluate = scrapy.Field()
  9.         describe = scrapy.Field()

2.spider编写

这里写图片描述

  1. class DoubanSpiderSpider(scrapy.Spider):
  2.       name = ‘douban_spider’
  3.       allowed_domains = [‘movie.douban.com’]
  4.       start_urls = [‘https://movie.douban.com/top250’]

print 是测试 看是否能够打印出信息
2.1user agent在settings中开启

  • 在网页中抓取 user agent 并写到settings中去
    这里写图片描述
  • 写到setting中
    这里写图片描述
    2.2创建main文件 并且执行 测试是否爬取信息
from scrapy import cmdline

cmdline.execute('scrapy crawl douban_spider'.split())

这里写图片描述

2.3spider里面的parse通过写xpath进行解析
xpath教程
点击具体的名称 右击检查 即可看到位置 下载xpath插件 可以匹配到对应的位置
这里写图片描述

这里写图片描述

进入spider写对应的结果
这里写图片描述
这里写图片描述
可以测试 print(douban_item)查看是否能够下载进去

  1. def parse(self, response):
  2.     movie_list=response.xpath(“//div[@class=’article’]//ol[@class=’grid_view’]/li”);
  3.     for i_item in movie_list:
  4.       douban_item = DoubanItem()
  5.       douban_item[‘serial_number’]=i_item.xpath(“.//div[@class=’item’]//em//text()”).extract_first()
  6.       douban_item[‘movie_name’]=i_item.xpath(“.//div[@class=’hd’]//a//span[1]/text()”).extract_first()
  7.       content=i_item.xpath(“.//div[@class=’bd’]//p[1]/text()”).extract()
  8.       for i_content in content:
  9.         content_s = “”.join(i_content.split())
  10.         douban_item[‘introduce’] = content_s
  11.       douban_item[‘star’] = i_item.xpath(“.//div[@class=’star’]//span[2]/text()”).extract_first()
  12.       douban_item[‘evaluate’] = i_item.xpath(“.//div[@class=’star’]//span[4]/text()”).extract_first()
  13.       douban_item[‘describe’] = i_item.xpath(“.//p[@class=’quote’]//span[1]/text()”).extract_first()
  14.       yield douban_item
  15.        #链接下一页
  16.       next_link = response.xpath(“//span[@class=’next’]/link/@href”).extract()
  17.       if (next_link):
  18.         next_link = next_link[0]
  19.         #传给调度器
  20.         yield scrapy.Request(“https://movie.douban.com/top250”+next_link,callback=self.parse)
  21.       pass

(注意)对于内容有多行的(content) 就需要特殊处理

处理完后记得要yield将其发给pipeline
这里写图片描述

解析下一页

自动检索下一页
这里写图片描述

#链接下一页
        next_link = response.xpath("//span[@class='next']/link/@href").extract()
        if next_link:
            next_link = next_link[0]
            #传给调度器
            yield scrapy.Request("https://movie.douban.com/top250"+next_link,callback=self.parse)

将数据保存到json或者csv格式

scrapy crawl douban_spider -o douban.json
scrapy crawl douban_spider -o douban.csv

猜你喜欢

转载自blog.csdn.net/ichglauben/article/details/82558731