Bootstrap

python-电影天堂爬取

import re
import urllib.request
import sys
from bs4 import BeautifulSoup
import xlwt
import os

# 爬取电影天堂的最新的电影前10页,并保存在Excel表中
url = "https://dy.dytt8.net/html/gndy/dyzz/list_23_1.html"

# 电影名称正则
# link = re.compile(r'<td colspan="2" style="padding-left:3px">(.*?)</td>')
# <a href="/html/gndy/dyzz/20230630/63862.html" class="ulink">2023年动作悬疑《暴风/绝密使命》HD国语中英双字</a>
# link = re.compile('<a href="/html/gndy/dyzz/\d*/\d*/\./html".class="ulink">(.*?)</a>')
regex = r'>(20.*?)<\/a>'


# 抓取数据分析
def main():
    path = ".\\电影天堂.xls"
    # getdata()
    # askURL(url)a
    datalist = getdata()
    # 保存数据
    save(datalist, path)



# 网页请求
def askURL(url):
    head = {
        # 模拟请求信息伪装
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.58"
    }
    request = urllib.request.Request(url, headers=head)   # 发送请求
    html = ""
    try:
        response = urllib.request.urlopen(request)   # 取得响应
        html = response.read().decode("gbk", errors="ignore")
        # print(html)
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)

    return html

def getdata():
    datalist = []
    for i in range(1, 16):
        url = "https://dy.dytt8.net/html/gndy/dyzz/list_23_{}.html".format(i)
        html = askURL(url)
        # 逐一分析数据
        soup = BeautifulSoup(html, "html.parser")
        for item in soup.find_all("div", class_="co_content8"):
            # data = []
            item = str(item)
            # print(item)
            # name = re.findall(link, item)
            data = re.findall(regex, item)
            datalist.append(data)
            # print(datalist)
    return datalist

            # for match in data:
            #     print(match)





"""
在这个代码中,我们首先检查指定的保存路径是否存在,如果不存在则创建该路径。
然后,我们创建一个 Workbook 对象 book,向其中添加了一个名为 Sheet1 的工作表 sheet。
接下来,我们使用两个循环遍历 datalist 中的数据,并将其逐个写入到 Excel 表格中。
最后,我们使用 book.save() 方法将数据保存到指定的文件中。

首先,我们定义了一个变量 col,用于表示当前要写入的列数。
        然后,我们使用一个 for 循环遍历 datalist 中的每一个子列表 data。
        在循环中,我们定义了另一个变量 row,用于表示当前要写入的行数,
        并使用另一个 for 循环遍历 data 中的每一个元素 item。
        在内层循环中,我们使用 sheet.write() 方法将当前元素 item 
        写入到 Excel 表格的第 row 行、第 col 列的单元格中。然后,我们将 row 的值加 1,以便写入下一行的数据
"""
def save(datalist, savepath):
    # 如果保存路径所在的目录不存在,则创建目录
    if not os.path.exists(os.path.dirname(savepath)):
        os.makedirs(os.path.dirname(savepath))

    # 创建一个Workbook对象,用于保存Excel文件
    book = xlwt.Workbook(encoding="utf-8", style_compression=0)

    # 创建一个Sheet对象,用于保存数据
    sheet = book.add_sheet("Sheet1", cell_overwrite_ok=True)
    row = 0
    col = 0
    for data in datalist:
        for item in data:
            # print("\n" + item)
            print(item)
            # print(f"Writing data: {item}")
            sheet.write(row, col, item)
            row += 1


    book.save(savepath)



if __name__ == '__main__':
    main()


;