IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python网络爬虫 -> 正文阅读

[Python知识库]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",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()
    

    三、运行结果实例

    ?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:49:40  更:2021-11-15 15:51:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:30:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码