精美图片哪里找,保姆级教程爬取让你不再犹豫!
发布日期:2021-05-18 01:39:08 浏览次数:17 分类:精选文章

本文共 1974 字,大约阅读时间需要 6 分钟。

Python爬虫:基于Scrapy爬取虎牙星秀主播图片

项目准备

创建一个新的Scrapy项目是开始的第一步。在命令行中输入以下命令:

scrapy startproject Huya
cd Huya
scrapy genspider huya "huya.com"

接下来需要修改Scrapy的配置文件settings.py,确保支持并发下载和图片存储:

BOT_NAME = 'Huya'
SPIDER_MODULES = ['Huya.spiders']
NEWSPIDER_MODULE = 'Huya.spiders'
LOG_LEVEL = "ERROR"
CONCURRENT_REQUESTS = 32
DEBUG = False
# 配置images pipeline
IMAGES_STORE = "images"

创建start.py脚本以便启动爬虫:

from scrapy import cmdline
import json
def main():
engine = cmdline.CommandLineRunner()
engine.crawl('huya', {'loglevel': 'ERROR'})
return
if __name__ == '__main__':
main()

网页分析

进入虎牙星秀区域后,观察发现数据并非动态加载而是静态加载。通过分析请求URL获取JSON数据,发现数据编码为Unicode格式。为了解决编码问题,可以在parse方法中指定编码格式:

def parse(self, response):
data_list = json.loads(response.text, encoding='utf-8')
# 对数据进行处理
return

代码实现

huya.py是核心爬虫文件:

class HuyaSpider(scrapy.Spider):
name = 'huya'
allowed_domains = ['huya.com']
start_url = 'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=1663&tagAll=0&page=1'
def parse(self, response):
data_list = json.loads(response.text, encoding='utf-8')
for data in data_list.get('data', {}).get('datas', []):
yield {
'img_url': data['screenshot'],
'title': data['nick']
}
# 指定爬取的页面数
if self.meta.get('page_num') < 3:
yield Request(
url=f'{self.start_url}&page={self.meta.get("page_num", 1) + 1}',
meta={'page_num': self.meta.get('page_num', 1) + 1},
encoding='utf-8'
)

pipelines.py负责存储和下载图片:

class HuyaPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
return [
Request(
url=item['img_url'],
meta={'title': item['title']}
)
]
def file_path(self, request, response, info):
return f'{info["title"]}.jpg'

运行结果

通过以上配置,爬虫项目能够成功抓取虎牙主播的图片和相关信息。建议将爬虫限制在合理范围内,避免频繁访问服务器。

上一篇:Python爬虫实战:2020最新京东商品数据爬虫保姆式教程(小白也能懂)!
下一篇:还是忍不住对B站下手了,来迎接我的爬取吧!!!

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月13日 23时24分02秒