Python批量爬取游戏卡牌信息

在这里插入图片描述

前言

  1. 本系列文章来源于真实的需求
  2. 本系列文章你来提我来做
  3. 本系列文章仅供学习参考
  4. 阅读人群:有Python基础、Scrapy框架基础

一、需求

  • 全站爬取游戏卡牌信息

在这里插入图片描述

二、分析

  • 查看网页源代码,图片资源是否存在

在这里插入图片描述

  • 网页源码中,定位下一页url路径

在这里插入图片描述

整体思路
1、通过Scrapy框架(中间件随机UA、代理)
2、通过Xpath构造单页爬取
3、通过Xpath定位下一页实现翻页功能

三、处理

初始化Scrapy框架

  1. Pycharm创建项目
  2. 安装Scrapy第三方库 pip install scrapy==2.5.1
  3. 创建项目 scrapy startproject card
  4. 进入card目录 cd card
  5. 创建爬虫 scrapy genspider get_card shadowverse-portal.com
  6. 修改start_urls
    在这里插入图片描述

编写get_card 文件
1、获取标题和图片url
2、翻页功能

    def parse(self, response):
        # 获取标题和图片url
        display = response.xpath("//div[@id='displayVisual']")
        for d in display:
            img_url = d.xpath("//img[@class='el-card-visual-image js-card-image lazyload']/@data-src").extract()
            title = d.xpath("//img[@class='el-card-visual-image js-card-image lazyload']/@alt").extract()
            img_url_dict = dict(zip(title, img_url))
            for name, url in img_url_dict.items():
                yield {"url":url}

        # 翻页功能
        page = response.xpath("//div[@class='cards-footer']")
        for p in page:
            page_url = p.xpath("//span[@class='bl-pagination-item is-next']/a/@href").extract_first()
            # print(page_url)
            yield scrapy.Request(url=f"https://shadowverse-portal.com{page_url}",
                                 method="get",
                                 callback=self.parse)

通过管道保存资源,这里自定义方法通过ImagePIPline管道进行保存
1、安装模块 pip install pillow
2、settings配置管道、中间件
3、管道自定义图片下载方法
4、通过中间件实现UA随机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 管道文件 pipelines.py
import scrapy
from scrapy.pipelines.images import ImagesPipeline


class MyTuPipeline(ImagesPipeline):
    # 1. 发送请求
    def get_media_requests(self, item, info):
        url = item['url']
        yield scrapy.Request(url=url, meta={"url": url})  # 直接返回一个请求对象即可

    # 2. 图片的存储路径
    def file_path(self, request, response=None, info=None, *, item=None):
        # 可以准备文件夹
        img_path = "card/"
        # 剔除
        file_path = item['url'].split("?")[0]
        file_name = file_path.split("/")[-1]  # 用item拿到url
        print("item:", file_name)
        real_path = img_path + "/" + file_name  # 文件夹路径拼接
        return real_path  # 返回文件存储路径即可

    # 3. 可能需要对item进行更新
    def item_completed(self, results, item, info):
        for r in results:
            print(r[1]['path'])
        return item  # 一定要return item 把数据传递给下一个管道
# setting.py文件
# UA随机
USER_AGENT_LIST = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
    'Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2919.83 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2866.71 Safari/537.36',
    'Mozilla/5.0 (X11; Ubuntu; Linux i686 on x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2820.59 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2762.73 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2656.18 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/44.0.2403.155 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36',
    'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36',
    'Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36',
]
# 中间件 middlewares.py
import random
from .settings import USER_AGENT_LIST

.....
	def process_request(self, request, spider):
		ua = random.choice(USER_AGENT_LIST)
	    request.headers["User-Agent"] = ua
.....

在这里插入图片描述

四、运行结果

在这里插入图片描述

源码下载方式:
知识星球Python 网络爬虫模块
我正在「Print(“Hello Python”)」和朋友们讨论有趣的话题,你⼀起来吧?
https://t.zsxq.com/086uG3kOn

请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python的pandas和openpyxl库来实现批量Excel内的数据。具体步骤如下: 1. 使用pandas库读Excel文件,例如: ```python import pandas as pd data = pd.read_excel('filename.xlsx', sheet_name='Sheet1') ``` 其中,`filename.xlsx`为要读的Excel文件名,`Sheet1`为要读的工作表名。 2. 遍历读到的数据,使用虫库(比如requests、beautifulsoup等)来相应数据。例如: ```python import requests from bs4 import BeautifulSoup for index, row in data.iterrows(): url = row['url'] # 假设Excel文件中有一个名为'url'的列,存储了需要数据的网址 response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 使用BeautifulSoup解析网页,提需要的数据 # ... ``` 3. 将到的数据写入Excel文件中。可以使用openpyxl库来实现。例如: ```python from openpyxl import Workbook wb = Workbook() ws = wb.active for index, row in data.iterrows(): # 数据 # ... # 将到的数据写入Excel文件 ws.cell(row=index+1, column=1, value=data1) ws.cell(row=index+1, column=2, value=data2) # ... wb.save('filename.xlsx') ``` 其中,`data1`、`data2`等为到的数据。`ws.cell(row=index+1, column=1, value=data1)`表示将`data1`写入第`index+1`行第1列的单元格中。最后通过`wb.save('filename.xlsx')`保存写入的数据到Excel文件中。 以上是一个基本的批量Excel内数据的流程,具体实现还需要根据实际情况进行调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值