一、主要使用的模块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()
三、运行结果实例
?
|