python-电影天堂爬取

该代码示例使用Python的urllib,BeautifulSoup和正则表达式库爬取电影天堂网站的最新电影列表,从第一页到第十页。抓取到的电影名称通过正则表达式匹配,然后存储到Excel表格中。程序首先发送HTTP请求,解析HTML内容,找到电影链接,最后将数据保存到指定路径的Excel文件。
摘要由CSDN通过智能技术生成
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()


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值