美文网首页
Python学习

Python学习

作者: 逛逛_堆栈 | 来源:发表于2021-04-23 14:42 被阅读0次

python爬虫(五)

python爬虫爬取豆瓣电影Top250数据

利用python爬取豆瓣电影TOP250页面电影的数据(二)

1、URL管理器

URL管理器实现了对url的一系列管理与控制。

class DouBan_Top250_UrlManager():

    def __init__(self):
        self.urls = []
        for i in range(10):  # 得到十个页面地址
            self.urls.append("https://movie.douban.com/top250?start=%d"\
                             "&filter=" % (i * 25))

2、网页下载器

网页下载器目的就是获得爬取到数据的内容的。

# 网页下载器
import requests
class DouBan_Top250_Downloader():
    # 添加header,伪装成浏览器
    def url_opener(url):
        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、网页解析器

网页解析器,简单的说就是用来解析html网页的工具,准确的说:它是一个HTML网页信息提取工具,就是从html网页中解析提取出“我们需要的有价值的数据”或者“新的URL链接”的工具。这里我们使用BeautifulSoup第三方模块。

from bs4 import BeautifulSoup
class DouBan_Top250_Parser():
    # 获取电影名字
    def get_name(self,soup):
        name_list = []
        targets = soup.find_all("div", class_="hd")
        for each in targets:
            name_list.append(each.a.span.text)
        return name_list

    # 获取电影信息
    def get_info(self,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
        return info_list

    # 获取电影评分
    def get_rate(self,soup):
        rate_list = []
        targets = soup.find_all("span", class_="rating_num")
        for each in targets:
            rate_list.append(each.text)
        return rate_list

4、网页输出器

页面输出器,其实就是定义输出的内容格式。输出到文件、网页等。

# 网页输出器
from douban import douban_top250_parser
class DouBan_Top250_Output():

    # 将获取信息写入TXT文件
    # 将爬取数据的电影名、评分、主演写入文档豆瓣Top250电影.txt
    def write_output(self,name_list, info_list, rate_list):
        with open("豆瓣Top250电影1.txt", "w", encoding="utf-8") as f:
            for i in range(25):
                f.write(name_list[i] + '    评分:' + rate_list[i] + '   ' + info_list[i] + '\n\n')

5、主入口文件

# 主入口文件
from douban import douban_top250_urlmanager
from douban import douban_top250_downloader
from douban import douban_top250_parser
from douban import douban_top250_output
from bs4 import BeautifulSoup

class DouBan_Top250_Main():
    def __init__(self):
        # Url管理器
        self.urlmanager = douban_top250_urlmanager.DouBan_Top250_UrlManager()
        # Url下载器
        self.downloadermanager = douban_top250_downloader.DouBan_Top250_Downloader()
        # Url解析器
        self.parsermanager = douban_top250_parser.DouBan_Top250_Parser()
        # Url输出器
        self.outputmanager = douban_top250_output.DouBan_Top250_Output()
    # 爬取数据的方法
    def drew(self):
        # 获得网页管理器所有要爬取的url列表
        urls = self.urlmanager.urls
        # 遍历每个页面链接并获取信息
        for each_url in urls:
            res = self.downloadermanager.url_opener(each_url)   # 获得每个链接的内容
            soup = BeautifulSoup(res.text, "html.parser")    # BeautifulSoup解析
            name_list = self.parsermanager.get_name(soup)   # 获得电影名
            info_list = self.parsermanager.get_info(soup)   # 获得电影简介
            rate_list = self.parsermanager.get_rate(soup)   # 获得电影评分
            # 输出数据格式
            self.outputmanager.write_output(rate_list,info_list,rate_list)

6、执行爬虫程序

if __name__ == '__main__':
    douBan_Top250_Main = DouBan_Top250_Main()
    douBan_Top250_Main.drew()

相关文章

网友评论

      本文标题:Python学习

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