文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

基于python的scrapy框架爬取豆

2023-01-30 23:43

关注

1.Scrapy框架介绍

scrapy

主要介绍,spiders,engine,scheduler,downloader,Item pipeline

scrapy常见命令如下:

 

对应在scrapy文件中有,自己增加爬虫文件,系统生成items,pipelines,setting的配置文件就这些。

items写需要爬取的属性名,pipelines写一些数据流操作,写入文件,还是导入数据库中。主要爬虫文件写domain,属性名的xpath,在每页添加属性对应的信息等。

    movieRank = scrapy.Field()
    movieName = scrapy.Field()
    Director = scrapy.Field()
    movieDesc = scrapy.Field()
    movieRate = scrapy.Field()
    peopleCount = scrapy.Field()
    movieDate = scrapy.Field()
    movieCountry = scrapy.Field()
    movieCategory = scrapy.Field()
    moviePost = scrapy.Field()
import json

class DoubanPipeline(object):
    def __init__(self):
        self.f = open("douban.json","w",encoding='utf-8')

    def process_item(self, item, spider):
        content = json.dumps(dict(item),ensure_ascii = False)+"\n"
        self.f.write(content)
        return item

    def close_spider(self,spider):
        self.f.close()

 

这里xpath使用过程中,安利一个chrome插件xpathHelper。

    allowed_domains = ['douban.com']
    baseURL = "https://movie.douban.com/top250?start="
    offset = 0
    start_urls = [baseURL + str(offset)]


    def parse(self, response):
        node_list = response.xpath("//div[@class='item']")

        for node in node_list:
            item = DoubanItem()
            item['movieName'] = node.xpath("./div[@class='info']/div[1]/a/span/text()").extract()[0]
            item['movieRank'] = node.xpath("./div[@class='pic']/em/text()").extract()[0]
            item['Director'] = node.xpath("./div[@class='info']/div[@class='bd']/p[1]/text()[1]").extract()[0]
            if len(node.xpath("./div[@class='info']/div[@class='bd']/p[@class='quote']/span[@class='inq']/text()")):
                item['movieDesc'] = node.xpath("./div[@class='info']/div[@class='bd']/p[@class='quote']/span[@class='inq']/text()").extract()[0]
            else:
                item['movieDesc'] = ""
            
            item['movieRate'] = node.xpath("./div[@class='info']/div[@class='bd']/div[@class='star']/span[@class='rating_num']/text()").extract()[0] 
            item['peopleCount'] = node.xpath("./div[@class='info']/div[@class='bd']/div[@class='star']/span[4]/text()").extract()[0]
            item['movieDate'] = node.xpath("./div[2]/div[2]/p[1]/text()[2]").extract()[0].lstrip().split('\xa0/\xa0')[0]
            item['movieCountry'] = node.xpath("./div[2]/div[2]/p[1]/text()[2]").extract()[0].lstrip().split('\xa0/\xa0')[1]
            item['movieCategory'] = node.xpath("./div[2]/div[2]/p[1]/text()[2]").extract()[0].lstrip().split('\xa0/\xa0')[2]           
            item['moviePost'] = node.xpath("./div[@class='pic']/a/img/@src").extract()[0]
            yield item

        if self.offset <250:
            self.offset += 25
            url = self.baseURL+str(self.offset)
            yield scrapy.Request(url,callback = self.parse)
     

 

这里基本可以爬虫,产生需要的json文件。

接下来是可视化过程。

我们先梳理一下,我们掌握的数据情况。

douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
douban.info()

 基本我们可以分析,电影国家产地,电影拍摄年份,电影类别以及一些导演在TOP250中影响力。

先做个简单了解,可以使用value_counts()函数。

douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
df_Country = douban['movieCountry'].copy()

for i in range(len(df_Country)):
    item = df_Country.iloc[i].strip()
    df_Country.iloc[i] = item[0]
print(df_Country.value_counts())

美国电影占半壁江山,122/250,可以反映好莱坞电影工业之强大。同样,日本电影和香港电影在中国也有着重要地位。令人意外是,中国大陆地区电影数量不是令人满意。豆瓣影迷对于国内电影还是非常挑剔的。

douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
df_Date = douban['movieDate'].copy()

for i in range(len(df_Date)):
    item = df_Date.iloc[i].strip()
    df_Date.iloc[i] = item[2]
print(df_Date.value_counts())    

2000年以来电影数目在70%以上,考虑10代才过去9年和打分滞后性,总体来说越新的电影越能得到受众喜爱。这可能和豆瓣top250选取机制有关,必须人数在一定数量以上。

douban = pd.read_json('douban.json',lines=True,encoding='utf-8')
df_Cate = douban['movieCategory'].copy()

for i in range(len(df_Cate)):
    item = df_Cate.iloc[i].strip()
    df_Cate.iloc[i] = item[0]
print(df_Cate.value_counts())    

剧情电影情节起伏更容易得到观众认可。

下面展示几张可视化图片

 

 

 

 不太会用python进行展示,有些难看。其实,推荐用Echarts等插件,或者用Excel,BI软件来处理图片,比较方便和美观。

第一次做这种爬虫和可视化,多有不足之处,恳请指出。

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯