1.前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
PS:如有需要Python学习资料的小伙伴可以点击下方链接自行获取
Python免费学习资料、代码以及交流解答点击即可加入
上一篇文章[以『B站』为实战案例!手把手教你掌握爬虫必备框架『Scrapy』]利用了scrapy爬取B站数据。本文将在此基础上完善代码,爬取更多的内容并保存到csv。
总共爬取1907条『课程学习』数据,分析哪类学习资源最火热最受大学生群体青睐。并通过可视化的方式将结果进行展示!
2.数据获取
程序是接着[以『B站』为实战案例!手把手教你掌握爬虫必备框架『Scrapy』]进行完善
1.各个scrapy文件
items文件
class BiliItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
#pass
# 视频标题
title = scrapy.Field()
# 链接
url = scrapy.Field()
# 观看量
watchnum = scrapy.Field()
# 弹幕数
dm = scrapy.Field()
# 上传时间
uptime = scrapy.Field()
# 作者
upname = scrapy.Field()
增加了四个字段(观看量、弹幕数、上传时间、作者)
lyc文件
class LycSpider(scrapy.Spider):
name = \'lyc\'
allowed_domains = [\'bilibili.com\']
start_urls = [\'https://search.bilibili.com/all?keyword=大学课程&page=40\']
# 爬取的方法
def parse(self, response):
item = BiliItem()
# 匹配
for jobs_primary in response.xpath(\'//*[@id=\"all-list\"]/div[1]/ul/li\'):
item[\'title\'] = (jobs_primary.xpath(\'./a/@title\').extract())[0]
item[\'url\'] = (jobs_primary.xpath(\'./a/@href\').extract())[0]
item[\'watchnum\'] = (jobs_primary.xpath(\'./div/div[3]/span[1]/text()\').extract())[0].replace(\"\\n\", \"\").replace(\" \", \"\")
item[\'dm\'] = (jobs_primary.xpath(\'./div/div[3]/span[2]/text()\').extract())[0].replace(\"\\n\", \"\").replace(\" \", \"\")
item[\'uptime\'] = (jobs_primary.xpath(\'./div/div[3]/span[3]/text()\').extract())[0].replace(\"\\n\", \"\").replace(\" \", \"\")
item[\'upname\'] = (jobs_primary.xpath(\'./div/div[3]/span[4]/a/text()\').extract())[0]
# 不能使用return
yield item
# 获取当前页的链接
url = response.request.url
#page +1
new_link = url[0:-1]+str(int(url[-1])+1)
# 再次发送请求获取下一页数据
yield scrapy.Request(new_link, callback=self.parse)
为新增的四个字段进行网页标签解析
pipelines文件
import csv
class BiliPipeline:
def __init__(self):
#打开文件,指定方式为写,利用第3个参数把csv写数据时产生的空行消除
self.f = open(\"lyc大学课程.csv\", \"a\", newline=\"\")
# 设置文件第一行的字段名,注意要跟spider传过来的字典key名称相同
self.fieldnames = [\"title\", \"url\",\"watchnum\",\"dm\",\"uptime\",\"upname\"]
# 指定文件的写入方式为csv字典写入,参数1为指定具体文件,参数2为指定字段名
self.writer = csv.DictWriter(self.f, fieldnames=self.fieldnames)
# 写入第一行字段名,因为只要写入一次,所以文件放在__init__里面
self.writer.writeheader()
def process_item(self, item, spider):
# print(\"title:\", item[\'title\'][0])
# print(\"url:\", item[\'url\'][0])
# print(\"watchnum:\", item[\'watchnum\'][0].replace(\"\\n\",\"\").replace(\" \",\"\"))
# print(\"dm:\", item[\'dm\'][0].replace(\"\\n\", \"\").replace(\" \", \"\"))
# print(\"uptime:\", item[\'uptime\'][0].replace(\"\\n\", \"\").replace(\" \", \"\"))
# print(\"upname:\", item[\'upname\'][0])
print(\"title:\", item[\'title\'])
print(\"url:\", item[\'url\'])
print(\"watchnum:\", item[\'watchnum\'])
print(\"dm:\", item[\'dm\'])
print(\"uptime:\", item[\'uptime\'])
print(\"upname:\", item[\'upname\'])
# 写入spider传过来的具体数值
self.writer.writerow(item)
# 写入完返回
return item
def close(self, spider):
self.f.close()
将爬取的内容保存到csv文件(lyc大学课程.csv)
2.启动scrapy
scrapy crawl lyc
通过上述命令可以启动scrapy项目
来源:https://www.cnblogs.com/python147/p/14517828.html
图文来源于网络,如有侵权请联系删除。