Python爬虫+数据可视化+存入数据库(1)

        学习一下如何网站爬虫,绝对够细,嘿嘿,也就会一些普通的数据爬取,像什么vip类似的数据的访问是被隐藏,当然技术够深也可以去尝试,但请遵守相关法律法规。其思想就,获取浏览器的信息,来模拟用户访问网站,再通过手法提取信息。

一、获取网站信息

        这里我们选择qq音乐的官网,登录一下,更好去爬:https://y.qq.com/n/ryqq/toplist/62

获取相关请求头信息

         我们使用python爬取数据过程中,需要一些信息模拟一个浏览器访问,而这些信息每个人的不一定相同,所以我们需要去获取。一般笔记本电脑使用快捷键Fn+F12,或者浏览器设置-->更多工具-->开发人员工具:

      1.先找到网络一栏,

      2.找一个页面能够查找User-Agent等信息

      3.点击标头

      4.粘贴复制

具体代码:

import requests

# 获取请求头信息,并定义一个字典为其进行存储,一般一个User-Agent就可以了,加一个cookie是为了降低网站拒绝访问的概率,也可以添加其他更多信息,模拟一个用户。

headers = {
		'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36 Edg/113.0.1774.35',
		'cookie' :'ptcz=6d2a7bcf0c658e1001e746d236f462b5dd97cf708332405dc4fd47352b4da897; RK=2otBczRsNr; eas_sid=l1S7M2L1C2T9R3m7N4F7d740k9; LW_sid=n1Y7I2c1c2f9X3H7P590K9h9w7; LW_uid=y1Z7x2d1R2x9f317x5r0d9t9p8; pgv_pvid=3751495580; fqm_pvqid=f95764f3-fa80-498c-b515-cf7de7f2d99d; fqm_sessionid=1968a848-8e96-4315-a457-949143aa5550; pgv_info=ssid=s5467148524; ts_uid=7810833049; _qpsvr_localtk=0.7545134021278037; login_type=1; wxopenid=; qqmusic_key=Q_H_L_63k3NdbQE3sNy0Yar28HGEzp7V_3s00FQHUXEWtO95XONEjPNQmZQL3FzwbcLWIbjLsN4hLH9xzddiawqq-g; music_ignore_pskey=202306271436Hn@vBj; wxrefresh_token=; tmeLoginType=2; psrf_qqrefresh_token=1EAEA9F5377370645118F628CC9800CF; euin=oK4koi-F7enPoz**; psrf_qqopenid=901D50A63BE4ADB644C944B0D6D760FD; qm_keyst=Q_H_L_63k3NdbQE3sNy0Yar28HGEzp7V_3s00FQHUXEWtO95XONEjPNQmZQL3FzwbcLWIbjLsN4hLH9xzddiawqq-g; psrf_musickey_createtime=1721477030; psrf_access_token_expiresAt=1729253030; uin=1553284043; psrf_qqaccess_token=1BA82A4E1431F9141338286AD53A04F3; wxunionid=; psrf_qqunionid=4780E6A6A3196E17D9EF4E385AABA028; ts_last=y.qq.com/n/ryqq/toplist/62; ts_refer=www.baidu.com/'
}

# 输入要爬取的网址
url = 'https://y.qq.com/n/ryqq/toplist/62'

# 开始爬取
res = requests.get(url, headers=headers)
print(res.text)

运行结果:

补充,如果要保存音乐,视频等,需要相应下载链接,以下是主要代码:

# 文件写、读常用库
import os

response = requests.get(链接)

with open('想要保存到的电脑文件地址', 'wb') as f:
        f.write(response.content)
 

二、整理数据

1.获取分列数据

(1)获取的数据是杂乱无章的,我们可以分步打印每一列数据前端来看看,使用快捷键Fn+F12,或者浏览器设置-->更多工具-->开发人员工具,先去点击元素,然后用鼠标放在(不要点击)每一个标签对查看左边阴影部分显示情况,最终我们发现songlist__item刚好涵盖我们所要提取的信息,然后没必要再继续下去查找。

(2)代码如下:

# 数据提取主要用这个库
from bs4 import BeautifulSoup

"""
获取网站信息的代码块
"""

# 将获取的信息放入一个池中
soup = BeautifulSoup(res.text, 'html.parser')

# 通过select 选择刚才查找到标签对名(这样标签对不止一个,所以我们要迭代查询)
for music in soup.select('.songlist__item'):
	print(music)
	print('***'*30)

(3)运行结果:

2.标签对信息再细化

标签对的信息还是杂乱无章,我们可以进一步分类

(1)使用select方法,我们可以获取到标签里面的内容,select('name')里面的name:当使用class定义用 .name ,id定义用#name,标签名定义直接用本名。也可以迭代使用,用空格隔开,如select('.text p'),访问的就是class标签对里面的标签对p里面的内容。

(2)使用select获取所需数据

from bs4 import BeautifulSoup

"""
获取网站信息的代码块
"""

soup = BeautifulSoup(res.text, 'html.parser')
for music in soup.select('.songlist__item'):
# 排行榜
	topNo = music.select('.songlist__number')[0].text   # tag类型需要转化为text, 否则无法使用text属性
# 歌名
	songName = music.select('.songlist__songname span a')[0]['title']
# 歌链接,因为直接获取的地址不全,所以我们需要+'https://y.qq.com/{}'.format()
	href = 'https://y.qq.com/{}'.format(music.select('.songlist__songname span a')[0]['href'])

# 歌手
	singer = music.select('.songlist__artist')[0].text

# 时长
	time = music.select('.songlist__time')[0].text
	print(topNo+'   '+songName+'   '+href+ '   '+singer +'   '+time)

(3)实现结果

3.信息录入csv

        通过第二步获取的数据只能在控制台,那么我们需要一个文件来保存这些信息,这里我们采用csv文件

(1)定义几个列表,然后存储数据

(2)每次迭代过程中,利用append()添加到列表中

topNos.append(topNo)
songNames.append(songName)
hrefs.append(href)
singers.append(singer)
times.append(time)

(3)将列表数据存入csv中,这里需要Pandas来构建数据表

import pandas as pd
df = pd.DataFrame()
df['排行'] = topNos
df['歌名'] = songNames
df['地址'] = hrefs
df['歌手'] = singers
df['时长'] = times
df.to_csv('排行榜.csv', encoding='utf_8_sig')

(4)在文件夹里面会有这个文件打开可以查看,也可以去电脑相关地址去查看,类似excel表格

三、最终代码

只需要改一下请求头就可以爬取了

import requests
import pandas as pd
from bs4 import BeautifulSoup

topNos = []
songNames = []
hrefs= []
singers = []
times = []

headers = {
		'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36 Edg/113.0.1774.35',
		'cookie' :'ptcz=6d2a7bcf0c658e1001e746d236f462b5dd97cf708332405dc4fd47352b4da897; RK=2otBczRsNr; eas_sid=l1S7M2L1C2T9R3m7N4F7d740k9; LW_sid=n1Y7I2c1c2f9X3H7P590K9h9w7; LW_uid=y1Z7x2d1R2x9f317x5r0d9t9p8; pgv_pvid=3751495580; fqm_pvqid=f95764f3-fa80-498c-b515-cf7de7f2d99d; fqm_sessionid=1968a848-8e96-4315-a457-949143aa5550; pgv_info=ssid=s5467148524; ts_uid=7810833049; _qpsvr_localtk=0.7545134021278037; login_type=1; wxopenid=; qqmusic_key=Q_H_L_63k3NdbQE3sNy0Yar28HGEzp7V_3s00FQHUXEWtO95XONEjPNQmZQL3FzwbcLWIbjLsN4hLH9xzddiawqq-g; music_ignore_pskey=202306271436Hn@vBj; wxrefresh_token=; tmeLoginType=2; psrf_qqrefresh_token=1EAEA9F5377370645118F628CC9800CF; euin=oK4koi-F7enPoz**; psrf_qqopenid=901D50A63BE4ADB644C944B0D6D760FD; qm_keyst=Q_H_L_63k3NdbQE3sNy0Yar28HGEzp7V_3s00FQHUXEWtO95XONEjPNQmZQL3FzwbcLWIbjLsN4hLH9xzddiawqq-g; psrf_musickey_createtime=1721477030; psrf_access_token_expiresAt=1729253030; uin=1553284043; psrf_qqaccess_token=1BA82A4E1431F9141338286AD53A04F3; wxunionid=; psrf_qqunionid=4780E6A6A3196E17D9EF4E385AABA028; ts_last=y.qq.com/n/ryqq/toplist/62; ts_refer=www.baidu.com/'
}
url = 'https://y.qq.com/n/ryqq/toplist/62'
res = requests.get(url, headers=headers)

soup = BeautifulSoup(res.text, 'html.parser')
for music in soup.select('.songlist__item'):
	topNo = music.select('.songlist__number')[0].text
	songName = music.select('.songlist__songname span a')[0]['title']
	href = 'https://y.qq.com/{}'.format(music.select('.songlist__songname span a')[0]['href'])
	singer = music.select('.songlist__artist')[0].text
	time = music.select('.songlist__time')[0].text
	topNos.append(topNo)
	songNames.append(songName)
	hrefs.append(href)
	singers.append(singer)
	times.append(time)
df = pd.DataFrame()
df['排行'] = topNos
df['歌名'] = songNames
df['地址'] = hrefs
df['歌手'] = singers
df['时长'] = times
df.to_csv('排行榜.csv', encoding='utf_8_sig')

暂时就更新到这里,有时间再去更新

针对有python基础再去尝试学习爬虫,当然没基础可以去推荐以下网站(免费使用,无需登录):           Python3 教程 | 菜鸟教程 (runoob.com)

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 豆瓣电影是众所周知的一个知名电影评分网站,其中的TOP250电影榜单更是备受关注。爬取这个榜单的数据可以帮助我们更好地了解电影市场和评价,数据方面可以更好地呈现这些数据。 首先,我们可以使用Python程序编写爬虫,抓取豆瓣电影TOP250的数据。我们可以通过分析网页源代码,选取需要的信息,例如电影名称、上映时间、豆瓣评分、评分人数、电影类型、导演、演员等信息。然后,将所有信息保存在CSV文件中。我们可以使用BeautifulSoup模块或Scrapy框架来实现爬虫程序的编写。 接下来,我们可以使用Python数据工具来对这些数据进行可处理。例如,我们可以使用matplotlib或Seaborn绘制电影评分的统计图表和线型图,了解每部电影评分的分布情况、评分人数的多寡、豆瓣评分的走向等。另外,我们也可以绘制散点图或热图,从电影类型、上映时间等角度分析不同类型电影的评分情况。我们还可以利用词云图工具呈现电影的标签云图,更直观地展示豆瓣用户对电影的评价。 总的来说,我们可以使用Python爬虫数据工具来爬取豆瓣电影TOP250榜单的数据,并且将数据以图表、统计、云图等形式进行可分析,从而更好地了解电影市场和评价。 ### 回答2: 豆瓣电影Top250是电影爱好者们都很熟悉的一个电影排行榜。为了更好地了解这个排行榜的情况,我们可以利用Python爬取豆瓣电影Top250上的电影信息,并将数据制作成可图表,以更直观地呈现数据。 首先,我们需要使用Python爬虫技术获取豆瓣电影Top250中每部电影的信息。一般来说,爬取网页数据需要用到一些第三方爬虫库,比如Requests和BeautifulSoup。使用Requests库可以向豆瓣服务器发送请求,获取Top250的网页HTML文件。接着,我们可以使用BeautifulSoup库解析HTML文件,从中获取每一部电影的名称、评分、演员、导演、简介等信息。爬取完毕后,将获取到的数据存储在MySQL或者MongoDB数据库中,方便后续对数据的处理和分析。 接下来,我们需要将获取到的数据进行数据。我们可以使用Python中的Matplotlib或者Seaborn等数据库来制作可图表。比如,我们可以生成柱状图、饼图、折线图等多种图表类型,展现Top250中电影各类别的数量分布、电影评分的分布情况、导演、演员等数据的贡献度等信息。 总之,通过Python爬取豆瓣电影Top250数据,并利用数据技术制作图表,我们可以更好地了解电影市场的情况,从中找到一些有用的数据洞察点,对后续的电影市场分析等工作提供有力支持。 ### 回答3: 随着互联网的普及和数据挖掘的发展,数据已经成为当今最流行的技术之一。而Python语言的出现,极大地促进了数据技术的发展,并且能够使数据更加高效、便捷。 Python爬取豆瓣电影Top250数据可以使用爬虫框架Scrapy,通过对网页的解析和内容抓取,将所需数据存入数据集中。数据集中存储了每个电影的名称、导演、主演、类型、上映时间、评价人数、评分等信息,这些数据可以通过Python数据工具如Matplotlib、Pandas等进行可处理。 通过数据可以得到丰富的数据分析和呈现,如: 1.不同类型电影的数量 通过Python工具可以得到不同类型电影的数量,并且可以使用饼图、柱状图等图表进行图像展示,帮助人们更好地了解豆瓣Top250电影中各类型的分布情况。 2.电影排名及评价情况 通过Python爬虫框架获取的豆瓣Top250电影可以进行排名展示及评价等数据的分析。可工具可以帮助我们通过散点图、折线图等形式直观地了解电影排名及评价情况。 3.电影时长对评分的影响 通过Python工具可处理电影时长对评分的影响。可以得出电影时长对于电影评分存在明显影响的结论,以饼图的形式将主观评价高的电影与电影时长进行对比。 Python爬取豆瓣电影Top250,通过数据工具可以使我们直观地了解到豆瓣Top250电影的分类情况、排名和评价等数据信息,同时,也可以了解到电影时长等因素对电影评价的影响,这对我们对电影的分析与推荐可以起到积极的作用,有助于我们更好地了解电影行业的情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值