Python学习

2021-04-22  本文已影响0人  逛逛_堆栈

python爬虫(四)

python爬虫爬取豆瓣电影数据

今天我们爬取一下豆瓣电影TOP250页面电影的数据,依然四步走:
1、确定目标
2、分析目标
3、编写代码
4、执行爬虫

1、确定目标

爬取内容为:豆瓣评分前二百五位电影的名字、主演、以及该电影的简介。
链接URL:https://movie.douban.com/top250

2、分析目标

进入上述右键审查元素,找到所要爬取的电影名、主演以及电影主页的链接都在标签<div class="info">中间,如下图所示:


豆瓣电影Top250

同时我们在切换下一页的时候

https://movie.douban.com/top250 #首页
https://movie.douban.com/top250?start=25&filter=   # 第二页
https://movie.douban.com/top250?start=50&filter=  # 第三页

3、代码编写

使用requests模块和BeautifulSoup4模块,可以快速实现爬虫效果。这里我们来爬取前十页数据:

3.1、获取url列表

url = [] # 定义存放地址的列表
for i in range(10):  # 得到十个页面地址
    url.append("https://movie.douban.com/top250?start=%d&filter=" \
               % (i * 25))

3.2、获得页面数据

def url_open(url):
    # 添加header,伪装成浏览器
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
    }
    res = requests.get(url, headers=headers)
    return res

3.3、获取需要数据

# 创建三个储存信息的列表
name_list = []
info_list = []
rate_list = []
#获取电影名字
def get_name(soup, name_list):
    targets = soup.find_all("div", class_="hd")
    for each in targets:
        name_list.append(each.a.span.text)
#获取电影信息
def get_info(soup, info_list):
    targets = soup.find_all("div", class_='bd')
    for each in targets:
        try:
            info_list.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())
        except:
            continue
#获取电影评分
def get_rate(soup, rate_list):
    targets = soup.find_all("span", class_="rating_num")
    for each in targets:
        rate_list.append(each.text)

3.4、数据的处理

#将获取信息写入TXT文件
def write_into(name_list, info_list, rate_list):
    with open("豆瓣Top250电影.txt", "w", encoding="utf-8") as f:
        for i in range(250):
            f.write(name_list[i]+ '    评分:'+ rate_list[i]+'   ' + info_list[i] +'\n\n')

3.5、主方法的定义

def main():
    #遍历每个页面链接并获取信息
    for each_url in url:
        res = url_open(each_url)
        soup = BeautifulSoup(res.text, "html.parser")
        get_name(soup, name_list)
        get_info(soup, info_list)
        get_rate(soup, rate_list)

    write_into(name_list, info_list, rate_list)

4、爬虫执行

上一篇下一篇

猜你喜欢

热点阅读