Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >真实的记录一次Python接单记录

真实的记录一次Python接单记录

作者头像
sergiojune
发布于 2021-09-29 08:09:23
发布于 2021-09-29 08:09:23
83200
代码可运行
举报
文章被收录于专栏:日常学python日常学python
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:

https://blog.csdn.net/lland5201314/article/details/117606268

大家好,我是涛哥。

上周末接到一个单1200,客服抽了百分之十的提成,到手1000,两个小时就完成了,心里美滋滋的,这样的单其实平常不多,技术难度低但是价格高,我们俗称“捡鱼单”。想着赚钱了请女神吃饭,竟被无情拒绝!

效果展示

工具准备

  • 数据来源: https://maoyan.com/board/4?offset=1
  • 开发环境:win10、python3.7
  • 开发工具:pycharm、Chrome

项目思路解析

首先将猫眼电影的所以的电影信息采集下来 这里以猫眼的top100榜为例 获取到电影信息:

  • 电影名称
  • 电影评分
  • 电影链接
  • 电影类型
  • 电影上映地点
  • 地点
  • 电影时长
  • 电影时长

解析网页数据信息

解析首页的跳转链接

猫眼详情页面的评分是有加密的,所以我们直接重主页提取评分信息

在详情页面提取数据

将数据保存在csv表格,方便之后做数据可视化

数据可视化需要用到的工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
import numpy as np
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# get_ipython().run_line_magic('matplotlib', 'inline')

效果图展示

源码展示:

爬虫:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 20210605日
# @File    : demo4.py

import requests
from fake_useragent import UserAgent
from lxml import etree
import time

# 随机请求头
ua = UserAgent()

# 构建请求 需要自己去网页上面换一下  请求不到了就 去网页刷新 把验证码弄了
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Cookie': '__mta=244176442.1622872454168.1622876903037.1622877097390.7; uuid_n_v=v1; uuid=6FFF6D30C5C211EB8D61CF53B1EFE83FE91D3C40EE5240DCBA0A422050B1E8C0; _csrf=bff9b813020b795594ff3b2ea3c1be6295b7453d19ecd72f8beb9700c679dfb4; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1622872443; _lxsdk_cuid=1770e9ed136c8-048c356e76a22b-7d677965-1fa400-1770e9ed136c8; _lxsdk=6FFF6D30C5C211EB8D61CF53B1EFE83FE91D3C40EE5240DCBA0A422050B1E8C0; ci=59; recentCis=59; __mta=51142166.1622872443578.1622872443578.1622876719906.2; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1622877097; _lxsdk_s=179dafd56bf-06d-403-d81%7C%7C12',
    'User-Agent': str(ua.random)
}


def RequestsTools(url):
    '''
    爬虫请求工具函数
    :param url: 请求地址
    :return: HTML对象 用于xpath提取
    '''
    response = requests.get(url, headers=headers).content.decode('utf-8')
    html = etree.HTML(response)
    return html


def Index(page):
    '''
    首页函数
    :param page: 页数
    :return:
    '''
    url = 'https://maoyan.com/board/4?offset={}'.format(page)
    html = RequestsTools(url)
    # 详情页地址后缀
    urls_text = html.xpath('//a[@class="image-link"]/@href')
    # 评分
    pingfen1 = html.xpath('//i[@class="integer"]/text()')
    pingfen2 = html.xpath('//i[@class="fraction"]/text()')

    for i, p1, p2 in zip(urls_text, pingfen1, pingfen2):
        pingfen = p1 + p2
        urs = 'https://maoyan.com' + i
        # 反正请求太过于频繁
        time.sleep(2)
        Details(urs, pingfen)


def Details(url, pingfen):
    html = RequestsTools(url)
    dianyan = html.xpath('//h1[@class="name"]/text()') # 电影名称
    leixing = html.xpath('//li[@class="ellipsis"]/a/text()') # 类型
    diqu = html.xpath('/html/body/div[3]/div/div[2]/div[1]/ul/li[2]/text()') # 读取总和
    timedata = html.xpath('/html/body/div[3]/div/div[2]/div[1]/ul/li[3]/text()') # 时间
    for d, l, b, t in zip(dianyan, leixing, diqu, timedata):
        countyr = b.replace('\n', '').split('/')[0] # 地区
        shichang = b.replace('\n', '').split('/')[1] # 时长
        f = open('猫眼.csv', 'a')
        f.write('{}, {}, {}, {}, {}, {}, {}\n'.format(d, pingfen, url, l, countyr, shichang, t))
        print(d, pingfen, url, l, countyr, shichang, t )


for page in range(0, 11):
    page *= 10
    Index(page)

可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/env python
# coding: utf-8

# 加载数据分析常用库
import pandas as pd
import numpy as np
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# get_ipython().run_line_magic('matplotlib', 'inline')


# In[3]:


path='./maoyan.csv'
df=pd.read_csv(path,sep=',',encoding='utf-8',index_col=False)
df.drop(df.columns[0],axis=1,inplace=True)
df.dropna(inplace=True)
df.drop_duplicates(inplace=True)
df.head(10)





#查看数据的结构
df.info()
print(df.columns)



# In[11]:


#年份&上映电影的数目  2018及以后的上映数目只是目前猫眼上公布的,具有不确定性,就先把2018及之后的剔除
fig,ax=plt.subplots(figsize=(9,6),dpi=70)
df[df[u'上映时间']<2018][u'上映时间'].value_counts().sort_index().plot(kind='line',ax=ax)
ax.set_xlabel(u'时间(年)')
ax.set_ylabel(u'上映数量')
ax.set_title(u'上映时间&上映的电影数目')




#基于上图,再弄一个上映时间&上映数量&评分的关系图
#但是由于1980年以前的数据量较少,评分不准确,将主要的分析区域集中在1980-2017
x=df[df[u'上映时间']<2018][u'上映时间'].value_counts().sort_index().index
y=df[df[u'上映时间']<2018][u'上映时间'].value_counts().sort_index().values
y2=df[df[u'上映时间']<2018].sort_values(by=u'上映时间').groupby(u'上映时间').mean()[u'评分'].values

fig,ax=plt.subplots(figsize=(10,5),dpi=70)
ax.plot(x,y,label=u'上映数量')
ax.set_xlim(1980,2017)
ax.set_xlabel(u'上映时间')
ax.set_ylabel(u'上映数量')
ax.set_title(u'时间&上映数量&评分均值')
ax2=ax.twinx()
ax2.plot(x,y2,c='y',ls='--',label=u'评分')
ax.legend(loc=1)
ax2.legend(loc=2)



# 解决中文乱码,坐标轴显示不出负值的问题
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False


# In[12]:


#世界&上映时间&均值评分
fig,ax=plt.subplots(figsize=(10,7),dpi=60)
df[df[u'评分']>0].groupby(u'上映时间').mean()[u'评分'].plot(kind='line',ax=ax)
ax.set_ylabel(u'评分')
ax.set_title(u'世界&上映时间&均值评分')


# In[13]:


#世界各类型影片所占的数目
#对类型进行切割成最小单位,然后统计
types=[]
for tp in df[u'类型']:
    ls=tp.split(',')
    for x in ls:
        types.append(x)

tp_df=pd.DataFrame({u'类型':types})
fig,ax=plt.subplots(figsize=(9,6),dpi=60)
tp_df[u'类型'].value_counts().plot(kind='bar',ax=ax)
ax.set_xlabel(u'类型')
ax.set_ylabel(u'数量')
ax.set_title(u'世界&类型&数目')


# In[14]:


#影片时长与评分的分布
#有个问题:其实有一些影片未进行评分,在这里要将这些给取缔
x=df[df[u'评分']>0].sort_values(by=u'时长(min)')[u'时长(min)'].values
y=df[df[u'评分']>0].sort_values(by=u'时长(min)')[u'评分'].values
fig,ax=plt.subplots(figsize=(9,6),dpi=70)
ax.scatter(x,y,alpha=0.6,marker='o')
ax.set_xlabel(u'时长(min)')
ax.set_ylabel(u'数量')
ax.set_title(u'影片时长&评分分布图')
#可以看出评分



i=0
c0=[]
c1=[]
c2=[]
c3=[]
c4=[]
c5=[]
c6=[]
c7=[]

for x in df[u'地区']:
    if u'中国大陆' in x:
        c0.append(df.iat[i, 0])
        c1.append(df.iat[i, 1])
        c2.append(df.iat[i, 2])
        c3.append(df.iat[i, 3])
        c4.append(df.iat[i, 4])
        c5.append(df.iat[i, 5])
        c6.append(df.iat[i, 6])
        c7.append(df.iat[i, 7])
    i=i+1

china_df=pd.DataFrame({u'电影':c0, u'评分':c1,u'链接':c2, u'类型':c3,u'地区':c4, u'上映地点':c5,u'时长(min)':c6,u'上映时间':c7})



# In[16]:


#中国&世界均值评分比较 时间范围在1980-2017  
x1 = df[df[u'评分']>0].groupby(u'上映时间').mean()[u'评分'].index
y1 = df[df[u'评分']>0].groupby(u'上映时间').mean()[u'评分'].values
    
x2 = china_df[china_df[u'评分']>0].groupby(u'上映时间').mean()[u'评分'].index
y2 = china_df[china_df[u'评分']>0].groupby(u'上映时间').mean()[u'评分'].values
fig,ax=plt.subplots(figsize=(12,9),dpi=60)
ax.plot(x1,y1,ls='-',c='DarkTurquoise',label=u'世界')
ax.plot(x2,y2,ls='--',c='Gold',label=u'中国')
ax.set_title(u'中国&世界均值评分')
ax.set_xlabel(u'时间')
ax.set_xlim(1980,2017)
ax.set_ylabel(u'评分')
ax.legend()


# In[17]:


#类型上映数目  中国&世界对比
#因为类型是混合的,为了方便统计 先写一个函数用来对类型进行分割



# In[18]:


#写分割的函数  传入一个Sreies 类型对象 返回一个类型分割的DataFrame
#这里传入的是一个 类型的Series

def Cuttig_type(typeS):
    types=[]
    types1=[]

    for x in typeS:
        if len(x)<4:
            # print x
            types1.append(x)
        ls=x.split(',')
        for i in ls:
            types.append(i)

    types.extend(types1)
    df=pd.DataFrame({u'类型':types})
    return pd.DataFrame(df[u'类型'].value_counts().sort_values(ascending=False))


# In[19]:


#中国&世界影片类型比较
df1=Cuttig_type(china_df[u'类型'])
df2=Cuttig_type(df[u'类型'])
trans=pd.concat([df1,df2],axis=1)
trans.dropna(inplace=True)
trans.columns=[u'中国',u'世界']
fig,ax=plt.subplots(figsize=(15,9),dpi=80)
trans.plot(kind='bar',ax=ax) 
fig.autofmt_xdate(rotation=30)
ax.set_title(u'中国&世界类型对比图')
ax.set_xlabel(u'类型')
ax.set_ylabel(u'影片的数目')


# In[20]:


#然后就是散点分布了,中国&世界&时长&评分分布
y = df[df[u'评分'] > 0].sort_values(by=u'时长(min)')[u'评分'].values
x = df[df[u'评分'] > 0].sort_values(by=u'时长(min)')[u'时长(min)'].values
y2 = china_df[china_df[u'评分'] > 0].sort_values(by=u'时长(min)')[u'评分'].values
x2 = china_df[china_df[u'评分'] > 0].sort_values(by=u'时长(min)')[u'时长(min)'].values

fig, ax = plt.subplots(figsize=(10,7), dpi=80)
ax.scatter(x, y, c='DeepSkyBlue', alpha=0.6, label=u'世界')
ax.scatter(x2, y2, c='Salmon', alpha=0.7, label=u'中国')
ax.set_title(u'中国&世界评分分布情况')
ax.set_xlabel(u'时长(min)')
ax.set_ylabel(u'评分')
ax.legend(loc=4)


# In[25]:


dfs=df[(df[u'上映时间']>1980)&(df[u'上映时间']<2019)]




# for x in range(0,len(dfs)):
#     print(dfs.iat[x,0],dfs.iat[x,-1])

df666 = dfs['电影'][:15]

wl = ",".join(df666.values)
# 把分词后的txt写入文本文件
# fenciTxt  = open("fenciHou.txt","w+")
# fenciTxt.writelines(wl)
# fenciTxt.close()

# 设置词云l
wc = WordCloud(background_color="white",  #设置背景颜色
               # mask=imread('shen.jpg'),   #设置背景图片
#                    max_words=2000,  #设置最大显示的字数
                   font_path="C:\\Windows\\Fonts\\simkai.ttf", # 设置为楷体 常规
    #设置中文字体,使得词云可以显示(词云默认字体是“DroidSansMono.ttf字体库”,不支持中文)
               max_font_size=60, #设置字体最大值
               random_state=30,  #设置有多少种随机生成状态,即有多少种配色方案
               )
myword = wc.generate(wl)  #生成词云
wc.to_file('result.jpg')

# 展示词云图
plt.imshow(myword)
plt.axis("off")
plt.show()


# In[41]:

小结

源码已经奉上了,就不对源码做解析了,如果对大家有用的话麻烦给个三连啦,十分感谢,最后给大家看一下我接单的过程。

PS :接单拍单一定要走第三方平台!!! PS :接单拍单一定要走第三方平台!!! PS :接单拍单一定要走第三方平台!!!

PS :接单拍单一定要走第三方平台!!! PS :接单拍单一定要走第三方平台!!! PS :接单拍单一定要走第三方平台!!!

(完)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 日常学python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
EDA和数据挖掘实战:漫威与 DC电影收视率和票房分析
Marvel Cinematic vs DC Universe哪个更好,这是一场永无止境的辩论,对吧?当你反对这些电影的任何一个时,粉丝会变得疯狂。在本篇文章中,我们将根据一些数据来对比Marvel 与 DC , 数据总能说出真相。
deephub
2021/11/16
4560
python中纬向平均、经向平均、水平流场、水汽柱浓度计算、坐标刻度朝向、label上下角标示例
一次课程作业画图的code记录。 import pandas as pd import numpy as np import xarray as xr from wrf import to_np,interpz3d,destagger import glob import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature from cartopy.mpl.ticker import
自学气象人
2022/11/14
1.5K2
python中纬向平均、经向平均、水平流场、水汽柱浓度计算、坐标刻度朝向、label上下角标示例
一行代码让matplotlib图表变高大上
matplotlib作为Python生态中最流行的数据可视化框架,虽然功能非常强大,但默认样式比较简陋,想要制作具有简洁商务风格的图表往往需要编写众多的代码来调整各种参数。
Feffery
2021/07/27
9910
【Python环境】matplotlib - 2D 与 3D 图的绘制
类MATLAB API 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 让我们加载它: from pylab import * 使用 qt 作为图形后端: %matplotlib qt 示例 类MATLAB API 绘图的简单例子: from numpy import * x = linspace(0, 5, 10) y = x ** 2figure() plot(x, y, 'r') xlabel('x') ylabel('y') title('title') s
陆勤_数据人网
2018/02/27
5.8K0
【Python环境】matplotlib - 2D 与 3D 图的绘制
Python可视化库Matplotlib的使用
一。导入数据 import pandas as pd unrate = pd.read_csv('unrate.csv') unrate['DATE'] = pd.to_datetime(unrate['DATE']) print(unrate.head(12)) 结果如下: DATE VALUE 0 1948-01-01 3.4 1 1948-02-01 3.8 2 1948-03-01 4.0 3 1948-04-01 3.9 4 1948-05-0
LhWorld哥陪你聊算法
2018/09/13
8410
Python可视化库Matplotlib的使用
干货,用Python绘制“手绘风格”图表的所有方法!
今天给大家带来绘制“手绘风格”可视化作品的小技巧,主要涉及Python编码绘制,内容如下:
小F
2021/06/25
1K0
干货,用Python绘制“手绘风格”图表的所有方法!
密度图及山脊图绘图基础
Seaborn 的 kdeplot() 函数是 Python 中绘制密度图的方式之一,Matplotlib 在现阶段则没有具体的绘制密度图的函数,一般是结合 Scipy 库中的 gaussian_kde() 函数结果进行绘制。
timerring
2023/10/13
6490
密度图及山脊图绘图基础
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
一章内容介绍三块内容,感觉哪个都没说清。 In[1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline 1. matplotlib入门 Matplotlib提供了两种方法来作图:状态接口和面向对象。 # 状态接口是通过pyplot模块来实现的,matplotlib会追踪绘图环境的当前状态 # 这种方法适合快速画一些简单
SeanCheney
2018/11/29
1.7K0
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
python 数据可视化工具包 matplotlib
ps: 在 jupyter notebook 环境需要添加 %matplotlib inline ,使得绘图生成在 notebook 页面。其他环境需要去掉 %matplotlib inline。
我是一条小青蛇
2019/10/23
8710
python 数据可视化工具包 matplotlib
Matplotlib中的titles(标题)、labels(标签)和legends(图例)
Matplotlib是一个Python中常用的绘图库,用于创建各种类型的图表。在Matplotlib中,你可以使用titles(标题)、labels(标签)和legends(图例)来增强你的图表。本文讨论Python的Matplotlib绘图库中可用的不同标记选项。
deephub
2023/12/13
7890
Matplotlib中的titles(标题)、labels(标签)和legends(图例)
10 种常用 Matplotlib 图的 Python 代码
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
松鼠爱吃饼干
2020/09/15
6800
10 种常用 Matplotlib 图的 Python 代码
python-matplotlib
# matplotlib 画图工具 import matplotlib.pyplot as plt import pandas as pd import numpy as np from pandas.core.series import Series # 自定义数据 X = Series(np.array([1,2,3,4,5])) Y = Series(np.array([1,5,2.7,3.8,4.9])) Y1 = (np.random.random((1,5))*10)[0] X1 = [1,2,
Dean0731
2020/05/08
6280
数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(上)
50个Matplotlib图的汇编,在数据分析和可视化中最有用。此列表允许您使用Python的Matplotlib和Seaborn库选择要显示的可视化对象。
Datawhale
2019/10/18
2.1K0
数据分析最有用的Top 50 Matplotlib图(带有完整的Python代码)(上)
25 个常用 Matplotlib 图的 Python 代码,收藏收藏!
大家好,今天要分享给大家25个Matplotlib图的汇总,在数据分析和可视化中非常有用,文章较长,可以马起来慢慢练手。
Python数据科学
2020/05/26
8430
Python气象绘图教程(四)
A、坐标轴在不设置时,会自动根据数据的大小进行最合适的展示(当然只是电脑认为最合适的),但没有坐标轴的名字,大多数时候需要定制坐标轴。
气象学家
2020/06/09
2.7K0
Python气象绘图教程(四)
Python-matplotlib 堆积柱状图绘制
在查找资料时看到了堆积柱状图,简单明了,而且绘制起来也不是很难,再结合自己的教程推文中也确实没有此类图表,即决定通过构建虚拟数据进行matplotlib堆积柱状图的绘制推文,详细内容如下:
DataCharm
2021/02/22
1.8K0
Python-matplotlib 堆积柱状图绘制
Python-matplotlib 箱线图绘制
箱线图(Boxplot) 是一种用作显示一组数据分散情况资料的统计图表,本期推文就如何使用matplotlib和seaborn 绘制出高度定制化的箱线图做出详细的讲解。
DataCharm
2021/02/22
4.3K0
Python-matplotlib 箱线图绘制
007.python科学计算库matplotlib(下)
版权声明:本文为博主原创文章,允许转载,请标明出处。 https://blog.csdn.net/qwdafedv/article/details/82724750
qubianzhong
2018/09/19
8280
007.python科学计算库matplotlib(下)
高效使用 Python 可视化工具 Matplotlib
Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。本文主要推荐一个学习使用Matplotlib的步骤。
昱良
2019/07/16
2.5K0
高效使用 Python 可视化工具 Matplotlib
12个最常用的matplotlib图例 !!
折线图(Line Plot):用于显示数据随时间或其他连续变量的变化趋势。在实际项目中,可以用于可视化模型性能随着训练迭代次数的变化。
JOYCE_Leo16
2024/03/19
5680
12个最常用的matplotlib图例 !!
相关推荐
EDA和数据挖掘实战:漫威与 DC电影收视率和票房分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验