美文网首页
Python学习

Python学习

作者: 逛逛_堆栈 | 来源:发表于2021-04-22 18:23 被阅读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、爬虫执行

    相关文章

      网友评论

          本文标题:Python学习

          本文链接:https://www.haomeiwen.com/subject/qzlwlltx.html