首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go 开发者的涨薪通道:自主开发 PaaS 平台核心功能-完整分享

核心代码,注释必读

// download:3w 52xueit com

vue 2.x 响应式

Object.defineProperty

爱学it学无止境

Scrapy 是一个快速高级的 Web 抓取网页抓取框架,用于爬取网站并从页面中提取结构化的数据。它使用 Python 编写。Scrapy 提供了强大的工具来处理下载、解析、存储数据等操作,并且非常适合进行大规模的网络爬虫开发。

二、入门

(一) 安装

基于命令行安装

pip install scrapy

如果速度很慢的可以更换一下镜像源

(二) 基本使用

创建项目

scrapy startproject myproject

生成爬虫

在当前目录下输入命令,将在myproject/spider目录下创建一个名为demo的爬虫文件,并指定爬取域的范围

scrapy genspider demo "piao.qunar.com"

数据处理

先在items.py文件中定义你希望爬取的数据结构,然后通过pipeline.py文件定义数据的处理逻辑

项目参数设置

在setting文件中可以设置项目的配置,比如请求头、延迟请求时间、管道存储等等

爬虫

在生成的demo文件中进行数据爬取

运行

demo:爬虫文件,也就是前面步骤2生成的文件

scrapy crawl demo

三、案例实战

来到案例实战,也是爬虫入门必爬的网站:豆瓣 爬取的内容是豆瓣Top250的电影数据

1. 首先创建项目

scrapy startproject movie

2. 生成爬虫

注意我们需要的只是豆瓣的 域名 ,而不是豆瓣网的完整网址

scrapy genspider douban "movie.douban.com"

3. 数据处理

定义我们要保存的数据结构,再通过pipelines文件进行简单处理

import scrapy

class MovieItem(scrapy.Item):

 rank = scrapy.Field()  # 电影排名

 name = scrapy.Field()  # 电影名称

 introduction = scrapy.Field()  # 电影简介

 rating = scrapy.Field()  # 电影评分

 comment_total = scrapy.Field()  # 评论人数

from .items import MovieItem

import csv

class MoviePipeline:

 def __init__(self):

     # 当爬虫开始时调用,打开文件准备写入

     self.file = open('豆瓣Top250电影数据.csv', 'w', newline='', encoding='utf-8')

     self.writer = csv.writer(self.file)

     # 写入表头

     self.writer.writerow(['rank', 'name', 'introduction', 'rating', 'comment_total'])

 def open_spider(self, spider):

     print('开始爬虫...')

 def process_item(self, item: MovieItem, spider):

     # 处理评论人数字段数据 爬取到的数据 279300人评价 => 希望的数据 279300

     item['comment_total'] = item['comment_total'][:-3]

     # 对每个Item调用,将Item写入CSV文件

     self.writer.writerow((item['rank'], item['name'], item['introduction'],

                           item['rating'], item['comment_total']))

     # 不要忘记返回item,否则后续的pipeline将不会接收到这个item

     return item

 def close_spider(self, spider):

     print("爬虫结束....")

4. 配置Scrapy爬虫参数

在settings.py文件中配置项目的各种设置,比如请求头、请求头、中间件、管道等。

# ITEM_PIPELINES是一个字典,键是Pipeline类的路径(从项目根目录开始),值是该Pipeline的优先级(数字越小,优先级越高)

ITEM_PIPELINES = {

"movie.pipelines.MoviePipeline": 300,

}

# 请求头

USER_AGENT = ""

5. 爬虫

在生成的文件中编写爬虫的代码逻辑,start_urls就是我们要爬取的网页,在parse函数中通过Xpath解析网页信息,拿到我们需要的字段数据,这里Xpath的具体用法不做具体讲解,不懂的可以详查。

import scrapy

from scrapy import Selector, Request

from ..items import MovieItem

class DoubanSpider(scrapy.Spider):

 name = "douban"

 allowed_domains = ["movie.douban.com"]

 start_urls = ['https://movie.douban.com/top250']

 def parse(self, response):

     sel = Selector(response)

     movie_items = sel.xpath('//div[@class="article"]//ol[@class="grid_view"]/li')

     for movie in movie_items:

         item = MovieItem()

         item['rank'] = movie.xpath('.//div[@class="pic"]/em/text()').extract_first()  # 电影排名

         name = movie.xpath('.//div[@class="hd"]//span[1]/text()').extract_first()  # 电影名称

         item['name'] = name

         item['introduction'] = movie.xpath('.//div[@class="bd"]//span[@class="inq"]/text()').get()  # 电影简介

         item['rating'] = movie.xpath('.//div[@class="star"]/span[2]/text()').extract_first()  # 电影评分

         item['comment_total'] = movie.xpath('.//div[@class="star"]/span[4]/text()').extract_first()  # 评价人数

         print("正在爬取 %s 电影数据" % name)

         yield item

     nextLink = sel.xpath('//span[@class="next"]/link/@href').extract()

     if nextLink:

         next_page_url = nextLink[0]

         yield Request(url=response.urljoin(next_page_url), callback=self.parse)

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OZo72FxZsKL4MApwsqZfXaRg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券