day21-python-spider

day21-python-spider

spider

实战

  • 爬虫类
from fake_useragent import UserAgent
import urllib
from ua_info import ua_list
import random
import re
from bs4 import BeautifulSoup
import xlwt


# 创建一个爬虫类
class MySpider01(object):
    # 初始化操作,定义初始化的网页
    def __init__(self):
        self.url = "https://app.movie/index.php/vod/type/id/4/page/{}.html"

    # 请求函数
    def getUrlInfo(self, url):
        # 网页信息
        html = ""
        # 随机获取一个请求头
        ua = UserAgent()
        headers = {
            "user-agent": ua.firefox
        }
        # 创建请求对象
        req = urllib.request.Request(headers=headers, url=url)
        try:
            # 获取请求的响应对象
            resp = urllib.request.urlopen(req)
            # 获取网页信息
            html = resp.read().decode("utf-8")

        except Exception as e:
            print(e)

        return html

    # 解析函数
    def parseHtml(self, html):
        # 用来保存结果数据
        dataList = []
        # 创建正则对象
        findMovie = re.compile(
            '<a class="stui-vodlist__thumb lazyload" data-original="(.*?)" href="(.*?)" title="(.*?)">', re.S)
        # 通过BeautifulSoup对网页进行解析,形成一个树形的结构
        soup = BeautifulSoup(html, "html.parser")
        for item in soup.find_all("li", class_="stui-vodlist__item"):
            # 保存每个电影的信息
            data = []
            # 转化为字符串
            item = str(item)
            # 获取电影的信息
            movieInfo = re.findall(findMovie, item)
            # 获取电影图片的链接
            movieImgLink = movieInfo[0][0]
            data.append(movieImgLink)

            # 获取电影的链接
            movieLink = "https://app.movie" + movieInfo[0][1]
            data.append(movieLink)

            # 获取电影的名字
            movieName = movieInfo[0][2]
            data.append(movieName)

            dataList.append(data)

        return dataList

    # 保存数据
    def saveData(self, dataList):
        # 创建一个excel表
        book = xlwt.Workbook(encoding="utf-8", style_compression=0)
        # 创建一个sheet
        sheet = book.add_sheet("电影", cell_overwrite_ok=True)
        # 插入数据
        sheet.write(0, 0, "电影图片链接")
        sheet.write(0, 1, "电影详情链接")
        sheet.write(0, 2, "电影名称")

        for i in range(0, len(dataList)):
            data = dataList[i]
            for j in range(0, 3):
                sheet.write(i + 1, j, data[j])

            print(f"第{i}条数据")

        # 保存文件
        book.save("电影.xls")

    # 主函数
    def run(self):
        url = self.url.format(1)
        print(url)
        html = self.getUrlInfo(url)
        dataList = self.parseHtml(html)
        self.saveData(dataList)


mySpider01 = MySpider01()
mySpider01.run()

  • 数据库类
# 数据库的操作
import pymysql
class MyDatabaseOpt(object):
    # 初始化链接数据库
    def __init__(self):
        self.username="root"   # 用户名
        self.password="root"   # 密码
        self.host="localhost"  # 数据库地址
        self.database="db_movie" # 数据库名字

    # 获取一个链接,一个游标cursor对象
    def getConnect(self):
        connect=pymysql.connect(host=self.host,user=self.username,password=self.password,database=self.database)
        cursor=connect.cursor()
        return cursor

    # 关闭链接
    def close(self,connect):
        # 空值的处理
        if connect:
            connect.close()

    # 数据库的增删改查操作


posted @ 2022-04-08 22:55  黎白昼  阅读(92)  评论(0)    收藏  举报