python 爬取电影天堂电影续编

时间:2021-07-29 12:23:05

在上一篇的基础上,添加了获取每部电影的下载链接的功能。

首先分析电影一部电影的页面的html。分析的网页的url:https://www.dy2018.com/i/99618.html

其中包含下载链接的标签为tbody:

python 爬取电影天堂电影续编

因此,获取下载链接的函数可以这样来写:

def dlink(link):                            #获取下载链接
    dllink_list=[]
    response=requests.get(link)
    demo=response.content.decode('gb2312','ignore')

    doc=BeautifulSoup(demo,'lxml')

    for tbody in doc.select('tbody'):       #获取下载链接
        for a in tbody.select('tr td a'):
            dllink_list.append(a.string)
    link_str=';'.join(dllink_list)

    return link_str

这样就可以获取到每部电影的下载链接了。下面是全部的源码

import requests
from bs4 import BeautifulSoup
import csv
import time

def html_parser(url_start):
    #获取html
    try:
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}    #模拟浏览器登入 
        r=requests.get(url_start,headers=headers,timeout=10)  #获取网页
    except:
        pass
    else:
        html = r.content.decode('gb2312','ignore')  #防止在打印结果的时候乱码,解码gb2312,忽略其中有异常的编码,仅显示有效的编码,还有 replace 功能为替换       

    #解析网页
    soup = BeautifulSoup(html,'lxml')                                
    for li in soup.select('.co_area2 li'):  #选择所有class=co_area2 下的所有的 li 节点
        for a in li.select('a'):            #选择 li 节点下的 a 节点 
            link=url_start+a['href']        #构造每个电影的网页链接
            download_link=dlink(link)       #获取下载链接
            item={                          #将获取的结果存储为字典
                "name":a.string,
                "link":link,
                "download_link":download_link,
            }
            save_result(item)               #每次获取一个结果后,存储一次
            item.clear()                    #存储后清空字典,为下次存储做准备

def save_result(item):                      #存储结果
    with open('dy.csv','a',newline='',encoding='utf-8') as csvfile:   #打开一个csv文件,用于存储
        fieldnames=['name','link','download_link']
        writer=csv.DictWriter(csvfile,fieldnames=fieldnames)
        writer.writerow(item)


def dlink(link):                            #获取下载链接
    dllink_list=[]
    response=requests.get(link)
    demo=response.content.decode('gb2312','ignore')

    doc=BeautifulSoup(demo,'lxml')

    for tbody in doc.select('tbody'):       #获取下载链接
        for a in tbody.select('tr td a'):
            dllink_list.append(a.string)
    link_str=';'.join(dllink_list)

    return link_str


def main():                                          #主程序
    with open('dy.csv','a',newline='') as csvfile:   #写入表头
        writer=csv.writer(csvfile)            
        writer.writerow(['name','link','download_link'])

    url_start="https://www.dy2018.com/"
    #html=html_get(url_start)
    html_parser(url_start)

if __name__ == '__main__':     #运行主程序
    start=time.time()
    print("It's workig ...")
    print("Please waiting")
    main()
    end=time.time()
    print("Have Done")
    print("总用时:")
    print(end-start)