python爬虫爬取豆瓣电影

最近买了《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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值