信息表达与智能处理-Python爬虫实验-电影网站

实验要求
使用python爬虫,从https://www.dytt8.net.cn/index.php/vod/show/id/6.html 爬取电影标题和主演信息,并按格式写入csv文件。
代码实现

import requests
import bs4
import csv
from bs4 import BeautifulSoup


# 获得页面内容,输入需要获取的url地址,输出页面内容
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)  # 获取页面,并进行超时设置
        r.raise_for_status()  # 产生异常信息
        r.encoding = r.apparent_encoding  # 指定字符集为获取得到的真实字符集
        return r.text  # 返回响应主体页面HTML
    except:
        ptint("网页获取失败")


# 解析页面提取信息,提取html中的所需信息到列表lst中
def parsePage(lst, html):
    soup = BeautifulSoup(html, "html.parser")  # 解析页面
    try:
        # 查找CSS过滤器
        title_list = soup.select('.stui-vodlist__detail>h4>a')  # 使用CCS类选择器及子标签查找,获得a标签存入列表
        people_list = soup.select('.stui-vodlist__detail>p')  # 使用CCS类选择器及子标签查找,获得p标签存入列表
        # 提取信息存入列表
        for i in range(len(title_list)):
            title = title_list[i].string  # 遍历列表获取每一个电影名称
            people = people_list[i].string  # 遍历列表获取每一个主演信息
            lst.append([title, people])  # 将每一个电影名称和主演信息添加到列表中
    except:
        print("网页解析失败")


# 信息输出,写入csv文件,并使用format()设置字符串格式打印内容
def printList(lst):
    try:
        # 输出表头信息
        # 写入csv文件
        csvFile = open("data.csv", "w")  # 打开文件
        writer = csv.writer(csvFile)
        header = ["number", "title", "people"]
        writer.writerow(header)
        # 使用格式化打印输出
        tplt = "{0:^6}\t{1:<16}\t{2:<50}"  # 设置格式
        print(tplt.format("number", "title", "people", chr(12288)))  # 打印表头
        number = 0  # 设置计数器
        # 输出电影信息
        for g in lst:
            number = number + 1
            info = [number, g[0], g[1]]
            writer.writerow(info)
            print(tplt.format(number, g[0], g[1][:50], chr(12288)))  # 打印内容,其中主演人员部分有所截取
        csvFile.close()  # 关闭文件
    except:
        print("输出失败")


# 主函数
def main():
    depth = 3  # 设置爬取深度,即爬取的页面数,在该网页中,一个页面含36个电影信息
    start_url = 'https://www.dytt8.net.cn/index.php/vod/show/id/6/page/'  # 每一个页面地址中的相同起始部分
    infolist = []   # 信息列表初始化
    for i in range(depth):
        try:
            url = start_url + 'i+1' + '.html'  # 构建不同页面的完整url链接
            html = getHTMLText(url)  # 获取页面html
            parsePage(infolist, html)  # 解析页面信息
        except:
            continue
    printList(infolist)  # 打印列表信息



if __name__ == '__main__':
    main()
    



爬取结果
信息表达与智能处理-Python爬虫实验-电影网站_第1张图片

你可能感兴趣的:(python,爬虫)