Python网络爬虫

Python网络爬虫,第1张

Python网络爬虫

一、主要使用的模块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",”
            ret = soup.find_all(class_="tbspan",)
            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(,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",”
            ret = soup.find_all(class_="tbspan",)
            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(,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()
    

    三、运行结果实例

     

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5495891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存