一、主要使用的模块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()
三、运行结果实例
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)