Python网络爬虫

该博客介绍了如何使用Python的requests、sqlite3和BeautifulSoup库爬取电影网站dygod.net上的电影信息,包括电影名称、播放链接,并进一步抓取磁力链接。数据抓取后存储到SQLite数据库中,实现电影信息的自动化收集和管理。
摘要由CSDN通过智能技术生成

一、主要使用的模块requests、sqlite3、bs4

爬取的电影网站为:https://www.dygod.net/html/gndy/dyzz/index.html

 

二、编码

  • create()函数,用于创建sqlite3数据库表
    def create():                        
        con = sqlite3.connect("test.db") #创建数据库函数:创建test.db文件
        cur = con.cursor()               #创建游标
        cur.execute("CREATE TABLE IF NOT EXISTS test(MOVIES, INTLINKS, MAGENTS)")#执行sql语句
        con.commit()                     #提交数据到数据库
        cur.close()                      #关闭连接
        con.close()
  • insert()函数,用于将爬取的信息传入进数据库中

    def insert(st1,st2,st3):                #插入数据库函数:将传入的值插入到test的test表中
        con = sqlite3.connect("test.db")
        cur = con.cursor()
        str(st1)                            #将st1转换为字符串
        cur.execute('INSERT INTO test VALUES (?,?,?)', (st1,st2,st3))
        con.commit()
        cur.close()
        con.close()
  • table()函数,用于从网站上爬取数据
     

    def table(ret,str1):#爬取数据函数
        for x in ret:
                str3 = str(x.find("a" ))
                num = str3.rfind('html',0,len(str3))     #找到'html'的位置
                str2 = str1 +str3[38:num]+'html'         #拼接播放页面链接
                print(x.find_all("td",colspan="2")[1].string)#电影的简介
                string1 = x.find_all("td", colspan="2")[1].string
                print("链接:" + str2)                   #播放页面链接
                string2 = "链接:" + str2
                lis = url2(str2)                         #调用得到磁力链接
                if not lis:                    #判断列表是不是为空(检查电影是不是有磁力链接)
                    pass
                else:
                    string3 = str('磁力链接'+lis[0])#传输一个磁力链接给string3
                count = 1                                #对磁力连接进行计数
                for i in lis:
                    print('磁力链接',count,i)
                    count+=1
                insert(string1,string2,string3)          #调用插入数据库函数
                print("="*100)
  • url1()函数,用于控制网站页数,爬取数据
    根据网站页面的源代码找到影片对应的标签和属性

    def url1():
        j = 1                         #表示页数(根据实际网页而定)
        while j<20:                   #这个网址对应的电影有388页,这里只爬20页,页数可以修改
            str1 = 'https://www.dygod.net/html/gndy/dyzz/'        #网页的前半段地址
            str4 = 'index_'+str(j)+'.html'                    #网页的后半段地址(页数会变化)
            if j == 1:                        #当页数为1的时候网页的链接为下面的链接
                str5 = 'https://www.dygod.net/html/gndy/dyzz/index.html'
            else:                        #当网页的链接不为1的时候,需要进行网页的拼接
                str5 = str1+str4         #拼接而成的网页,表示第1页以后的网页
            url  = str5                   #url链接
            hd = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'
            }                            #头部文件
            res = requests.get(url,headers=hd)
            res.encoding = res.apparent_encoding
                                        #这里使用的是bs4方式进行网爬
            soup = BeautifulSoup(res.text,"html.parser")
                                         #找到网页中属性为“class_="tbspan",style="margin-top:6px"”
            ret = soup.find_all(class_="tbspan",style="margin-top:6px")
            table(ret,str1)
            j+=1
  • url2()函数,用于爬取磁力链接
    找到磁力链接所在页面源代码对应的属性如下

    def url2(str2):    #爬取磁力链接函数:这个函数是通过播放页面链接来获取磁力链接,方法和上面类似
        url = str2
        hd = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
        }       #头部信息,为了避开网站的安全防护
        res = requests.get(url, headers=hd)
        res.encoding = res.apparent_encoding
        soup = BeautifulSoup(res.text, "html.parser")#
        ret = soup.find_all(style="WORD-WRAP: break-word",bgcolor="#fdfddf" )                                  
                                                 # WORD-WRAP: break-word
        count = 1                                #统计磁力链接的个数
        lis = []                                 #存放磁力链接的列表
        for x in ret:
            str3 = str(x.find("a"))
            # print('磁力链接',count,':',str3[9:73])
            count+=1
            lis.append(str(str3[9:73]))
        return lis
  • 全部代码
    #-*- coding:utf-8 -*-
    '''
    @Author: duanyh
    20/20
    @contact: 
    @Time: 2021/10/19 15:23
    @version: 1.0
    '''
    import sqlite3
    import requests
    from bs4 import BeautifulSoup
    def create():#创建数据库函数:创建test.db文件
        con = sqlite3.connect("test.db")
        cur = con.cursor()
        cur.execute("CREATE TABLE IF NOT EXISTS test(MOVIES, INTLINKS, MAGENTS)")
        con.commit()
        cur.close()
        con.close()
    def insert(st1,st2,st3):#插入数据库函数:将传入的值插入到test的test表中
        con = sqlite3.connect("test.db")
        cur = con.cursor()
        str(st1)
        cur.execute('INSERT INTO test VALUES (?,?,?)', (st1, st2,st3))
        con.commit()
        cur.close()
        con.close()
    def table(ret,str1):#爬取数据函数
        for x in ret:
                str3 = str(x.find("a" ))
                num = str3.rfind('html',0,len(str3))#找到'html'的位置
                str2 = str1 +str3[38:num]+'html'#拼接播放页面链接
                print(x.find_all("td",colspan="2")[1].string)#电影的简介
                string1 = x.find_all("td", colspan="2")[1].string
                print("链接:" + str2)#播放页面链接
                string2 = "链接:" + str2
                lis = url2(str2)#调用得到磁力链接
                if not lis:#判断列表是不是为空(检查电影是不是有磁力链接)
                    pass
                else:
                    string3 = str('磁力链接'+lis[0])#传输一个磁力链接给string3
                count = 1
                for i in lis:
                    print('磁力链接',count,i)
                    count+=1
                insert(string1,string2,string3)#调用插入数据库函数
                print("="*100)
    def url1():
        j = 1 #表示页数(根据实际网页而定)
        while j<20:#这个网址对应的电影有388页,这里只爬20页,页数可以修改
            str1 = 'https://www.dygod.net/html/gndy/dyzz/'#网页的前半段地址
            str4 = 'index_'+str(j)+'.html'#网页的后半段地址(页数会变化)
            if j == 1:#当页数为1的时候网页的链接为下面的链接
                str5 = 'https://www.dygod.net/html/gndy/dyzz/index.html'
            else:#当网页的链接不为1的时候,需要进行网页的拼接
                str5 = str1+str4 #拼接而成的网页,表示第1页以后的网页
            url  = str5   #url链接
            hd = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'
            }#头部文件
            res = requests.get(url,headers=hd)
            res.encoding = res.apparent_encoding
            #这里使用的是bs4方式进行网爬
            soup = BeautifulSoup(res.text,"html.parser")
            #找到网页中属性为“class_="tbspan",style="margin-top:6px"”
            ret = soup.find_all(class_="tbspan",style="margin-top:6px")
            table(ret,str1)
            j+=1
    def url2(str2):#爬取磁力链接函数:这个函数是通过播放页面链接来获取磁力链接,方法和上面类似
        url = str2
        hd = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
        }
        res = requests.get(url, headers=hd)
        res.encoding = res.apparent_encoding
        soup = BeautifulSoup(res.text, "html.parser")#
        ret = soup.find_all(style="WORD-WRAP: break-word",bgcolor="#fdfddf" )  # WORD-WRAP: break-word
        count = 1#统计磁力链接的个数
        lis = []#存放链接的列表
        for x in ret:
            str3 = str(x.find("a"))
            # print('磁力链接',count,':',str3[9:73])
            count+=1
            lis.append(str(str3[9:73]))
        return lis
    def main():
        create()#调用创建数据库函数---11行
        url1()#调用url1函数---47行
    if __name__ == '__main__':
        main()
    

    三、运行结果实例

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值