python爬虫爬取豆瓣电影

简介: 最近买了《python编程从入门到实践》,想之后写两篇文章,一篇数据可视化,一篇python web,今天这篇就当python入门吧。一.前期准备:IDE准备:pycharm导入的python库:requests用于请求,BeautifulSoup用于网页解析二.

最近买了《python编程从入门到实践》,想之后写两篇文章,一篇数据可视化,一篇python web,今天这篇就当python入门吧。

一.前期准备:

IDE准备:pycharm
导入的python库:requests用于请求,BeautifulSoup用于网页解析

二.实现步骤

1.传入url

2.解析返回的数据

3.筛选

4.遍历提取数据

三.代码实现

import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库

# 传入URL
r = requests.get("https://movie.douban.com/top250")

# 解析返回的数据
soup=BeautifulSoup(r.content,"html.parser")

#找到div中,class属性为item的div
movie_list=soup.find_all("div",class_="item")

#遍历提取数据
for movie in movie_list:
    title=movie.find("span",class_="title").text
    rating_num=movie.find("span",class_="rating_num").text
    inq=movie.find("span",class_="inq").text
    star = movie.find('div', class_='star')
    comment_num = star.find_all('span')[-1].text
    print(title, rating_num, '\n', comment_num, inq, '\n')

以title变量为例,我们找到了div中,class属性为item的div,然后在此div中,筛选出class名为title的span,获取文本内容,打印(comment_num比较特殊,因为其在star的div下,没有class属性,为div中最后一个span,所以我们取出star层级中最后一个span,变为文本),以下是输出结果。


img_446cb68535aaad97f1c6783f594a6b25.jpe
豆瓣.JPG

四.对获取到的数据进行整合

1.整合成列表

2.整合成json文件

3.定义为函数形式

1.整合成列表

import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
import pprint # 规范显示列表的插件库

# 传入URL
r = requests.get("https://movie.douban.com/top250")

# 解析返回的数据
soup=BeautifulSoup(r.content,"html.parser")

#找到div中,class属性为item的div
movie_list=soup.find_all("div",class_="item")

#创建存储结果的空列表
result_list=[]

#遍历提取数据
for movie in movie_list:
    #创建字典
    dict={}
    dict["title"]=movie.find("span",class_="title").text
    dict["dictrating_num"]=movie.find("span",class_="rating_num").text
    dict["inq"]=movie.find("span",class_="inq").text
    star = movie.find('div', class_='star')
    dict["comment_num"] = star.find_all('span')[-1].text
    result_list.append(dict)

    # 显示结果
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(result_list)

控制台显示的结果:


img_fd2531c8a9777b90c52e02837bd96684.jpe
列表.JPG

2.整合成JSON文件

import requests # 导入网页请求库
import json# 用于将列表字典(json格式)转化为相同形式字符串,以便存入文件
from bs4 import BeautifulSoup # 导入网页解析库


# 传入URL
r = requests.get("https://movie.douban.com/top250")

# 解析返回的数据
soup=BeautifulSoup(r.content,"html.parser")

#找到div中,class属性为item的div
movie_list=soup.find_all("div",class_="item")

#创建存储结果的空列表
result_list=[]

#遍历提取数据
for movie in movie_list:
    #创建字典
    dict={}
    dict["title"]=movie.find("span",class_="title").text
    dict["dictrating_num"]=movie.find("span",class_="rating_num").text
    dict["inq"]=movie.find("span",class_="inq").text
    star = movie.find('div', class_='star')
    dict["comment_num"] = star.find_all('span')[-1].text
    result_list.append(dict)

    # 显示结果
# 将result_list这个json格式的python对象转化为字符串
s = json.dumps(result_list, indent = 4, ensure_ascii=False)
# 将字符串写入文件
with open('movies.json', 'w', encoding = 'utf-8') as f:
    f.write(s)

结果:


img_03658bb7b89f70ac9020280f7b597ad5.jpe
json.JPG

3.定义成函数

import requests # 导入网页请求库
import json# 用于将列表字典(json格式)转化为相同形式字符串,以便存入文件
from bs4 import BeautifulSoup # 导入网页解析库

# 用于发送请求,获得网页源代码以供解析
def start_requests(url):
    r = requests.get(url)
    return r.content

# 解析返回的数据
def parse(text):
    soup=BeautifulSoup(text,"html.parser")
    movie_list=soup.find_all("div",class_="item")
    result_list=[]
    for movie in movie_list:
    #创建字典
        dict={}
        dict["title"]=movie.find("span",class_="title").text
        dict["dictrating_num"]=movie.find("span",class_="rating_num").text
        dict["inq"]=movie.find("span",class_="inq").text
        star = movie.find('div', class_='star')
        dict["comment_num"] = star.find_all('span')[-1].text
        result_list.append(dict)
    return result_list

    #将数据写入json文件
def write_json(result):
    s = json.dumps(result, indent = 4, ensure_ascii=False)
    with open('movies1.json', 'w', encoding = 'utf-8') as f:
        f.write(s)

# 主运行函数,调用其他函数
def main():
    url = 'https://movie.douban.com/top250'
    text = start_requests(url)
    result = parse(text)
    write_json(result)

if __name__ == '__main__':
    main()

结果:


img_c6a3657cae5ef019047d9cafaadcc8b7.jpe
函数.JPG

觉得有用的话就给颗小吧~

相关文章
|
22小时前
|
数据采集 存储 XML
如何利用Python构建高效的Web爬虫
本文将介绍如何使用Python语言以及相关的库和工具,构建一个高效的Web爬虫。通过深入讨论爬虫的基本原理、常用的爬虫框架以及优化技巧,读者将能够了解如何编写可靠、高效的爬虫程序,实现数据的快速获取和处理。
|
7天前
|
数据采集 Web App开发 数据可视化
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
Python爬虫技术与数据可视化:Numpy、pandas、Matplotlib的黄金组合
|
8天前
|
数据采集 存储 大数据
Python爬虫:数据获取与解析的艺术
本文介绍了Python爬虫在大数据时代的作用,重点讲解了Python爬虫基础、常用库及实战案例。Python因其简洁语法和丰富库支持成为爬虫开发的优选语言。文中提到了requests(发送HTTP请求)、BeautifulSoup(解析HTML)、Scrapy(爬虫框架)、Selenium(处理动态网页)和pandas(数据处理分析)等关键库。实战案例展示了如何爬取电商网站的商品信息,包括确定目标、发送请求、解析内容、存储数据、遍历多页及数据处理。最后,文章强调了遵守网站规则和尊重隐私的重要性。
19 2
|
9天前
|
数据采集 XML 数据处理
使用Python实现简单的Web爬虫
本文将介绍如何使用Python编写一个简单的Web爬虫,用于抓取网页内容并进行简单的数据处理。通过学习本文,读者将了解Web爬虫的基本原理和Python爬虫库的使用方法。
|
12天前
|
数据采集 定位技术 Python
Python爬虫IP代理技巧,让你不再为IP封禁烦恼了! 
本文介绍了Python爬虫应对IP封禁的策略,包括使用代理IP隐藏真实IP、选择稳定且数量充足的代理IP服务商、建立代理IP池增加爬虫效率、设置合理抓取频率以及运用验证码识别技术。这些方法能提升爬虫的稳定性和效率,降低被封禁风险。
|
14天前
|
数据采集 存储 JSON
Python爬虫面试:requests、BeautifulSoup与Scrapy详解
【4月更文挑战第19天】本文聚焦于Python爬虫面试中的核心库——requests、BeautifulSoup和Scrapy。讲解了它们的常见问题、易错点及应对策略。对于requests,强调了异常处理、代理设置和请求重试;BeautifulSoup部分提到选择器使用、动态内容处理和解析效率优化;而Scrapy则关注项目架构、数据存储和分布式爬虫。通过实例代码,帮助读者深化理解并提升面试表现。
17 0
|
17天前
|
数据采集 Web App开发 开发者
探秘Python爬虫技术:王者荣耀英雄图片爬取
探秘Python爬虫技术:王者荣耀英雄图片爬取
|
17天前
|
存储 数据采集 NoSQL
使用Python打造爬虫程序之数据存储与持久化:从网络到硬盘的无缝对接
【4月更文挑战第19天】本文探讨了爬虫中的数据存储与持久化技术,包括文本文件存储、数据库(关系型与非关系型)、NoSQL数据库和键值存储,以及ORM框架的使用。根据数据类型、规模和访问需求选择合适存储方式,并注意数据安全、备份和恢复策略。正确选择和应用这些技术能有效管理和利用爬取数据。
|
17天前
|
数据采集 缓存 算法
使用Python打造爬虫程序之Python中的并发与异步IO:解锁高效数据处理之道
【4月更文挑战第19天】本文探讨了Python中的并发与异步IO,区分了并发(同时处理任务)与并行(同时执行任务)的概念。Python的多线程受限于GIL,适合IO密集型任务,而多进程适用于CPU密集型任务。异步IO通过非阻塞和回调/协程实现高效IO,Python的asyncio库提供了支持。应用场景包括Web开发和网络爬虫等。实践指南包括理解任务类型、使用asyncio、避免阻塞操作、合理设置并发度和优化性能。理解并运用这些技术能提升Python程序的效率和性能。
|
1天前
|
测试技术 Python
Python模块化方式编程实践
Python模块化编程提升代码质量,包括:定义专注单一任务的模块;使用`import`导入模块;封装函数和类,明确命名便于重用;避免全局变量降低耦合;使用文档字符串增强可读性;为每个模块写单元测试确保正确性;重用模块作为库;定期维护更新以适应Python新版本。遵循这些实践,可提高代码可读性、重用性和可维护性。
13 2