BS4爬取电影天堂的下载地址并保存至csv文件

思路:BS4爬取电影天堂中最新电影名称及下一级链接中的下载地址,结果保存至csv文件
存在问题及需要完善(恳请各位大神提供帮助):
(1)采集结果中的下载链接存在乱码;
(2)代码需要优化。

# coding=utf-8
import requests
from bs4 import BeautifulSoup
import time
import csv


def getHtml(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'}
    page = requests.get(url, headers=headers)
    page.encoding = "gb2312"
    html = page.text
    #print(html)

    soup = BeautifulSoup(html, 'html.parser')
    for li in soup.find_all('div', class_="co_content8"):
        for url_info in li.find_all('a', class_="ulink"):
            moviename= url_info.get_text()
            url_1= 'http://www.dytt8.net' + url_info['href']
            print(moviename)
            print(url_1)
            #详情页
            req2 = requests.get(url_1, headers=headers)
            req2.encoding = 'gb2312'
            content2 = req2.content
            soup = BeautifulSoup(content2, 'html.parser')
            for td in soup.find_all('td', attrs={'style': 'WORD-WRAP: break-word'}):
                for url_2 in td.find_all('a'):
                    url_3 = url_2.string
                    print(url_3)
                    item = {  # 将获取的结果存储为字典
                        "name": moviename,
                        "link": url_1,
                        "link3": url_3
                    }
                    save_result(item)  # 每次获取一个结果后,存储一次
                    item.clear()  # 存储后清空字典,为下次存储做准备
#存储
def save_result(item):
    #保存在TXT
    #with open('result.txt','a ')as f:
        #f.write(json.dumps(content) + '\n')
        #f.close()
    #保存在csv中
    with open('dy.csv', 'a', newline='',encoding='utf-8') as csvfile:  # 打开一个csv文件,用于存储
        fieldnames = ['name', 'link','link3']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writerow(item)
def main():
    with open('dy.csv', 'a', newline='') as csvfile:  # 写入表头
        writer = csv.writer(csvfile)
        writer.writerow(['name', 'link','link3'])

    #url = "https://www.dytt8.net/html/gndy/dyzz/index.html"
    #getHtml(url)

    #翻页1
    '''urls = ['https://www.dytt8.net/html/gndy/dyzz/list_23_1.html',
            'https://www.dytt8.net/html/gndy/dyzz/list_23_2.html'
            ]
    for url in urls:
        getHtml(url)
        time.sleep(2)'''

    #翻页2
    for i in range(1,3):
        print('正在访问第'+format(i)+'页')
        url ='https://www.dytt8.net/html/gndy/dyzz/list_23_'+ str(i)+'.html'
        getHtml(url)
        time.sleep(2)
if __name__ == '__main__':
    main()

采集结果:(结果中存在乱码)
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个示例代码,它演示了如何使用bs4从网站中提取数据并将其保存CSV文件中: ```python import requests from bs4 import BeautifulSoup import csv # 向网站发送请求 url = 'https://www.example.com/' response = requests.get(url) # 创建BeautifulSoup对象 soup = BeautifulSoup(response.text, 'html.parser') # 从网站中提取数据 data = [] table = soup.find('table') # 如果有数据表格,可以使用这一行提取 rows = table.find_all('tr') # 获取所有行 for row in rows: cols = row.find_all('td') cols = [col.text.strip() for col in cols] data.append(cols) # 将数据保存CSV文件中 filename = 'output.csv' with open(filename, 'w', newline='') as csv_file: writer = csv.writer(csv_file) writer.writerows(data) ``` 在这个例子中,我们首先向指定的网站发送请求,并使用BeautifulSoup创建一个对象来解析响应文本。我们通过寻找表格标记(<table>)来定位数据,并使用find_all方法来获取表格中的所有行。我们使用strip函数删除每个单元格中的空格,并将每个行的列添加到一个称为“data”的列表中。 最后,我们使用csv模块中的writerow方法向名为“output.csv”的文件写入数据。我们使用with语句创建一个csv文件对象,并向对象调用我们可以写入数据的writerows方法。在写入CSV文件之前,我们使用newline=''参数设定新行的行为,以确保在保存文件时,文件的格式正确。 请注意,这个代码示例演示了一个基本的例子,并假定数据以表格形式存储在网站中。如果数据以不同的方式出现或需要更复杂的处理,您可能需要使用其他技术或工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值