Python暑假班第四次作业

python基础阶段项目练习:

1、写一个网络爬虫程序

2、爬取目标网站数据,关键项不能少于5项。

3、存储数据到数据库,可以进行增删改查操作。

4、扩展:将库中数据进行可视化展示。

内容:

我们可以使用requests、re、xlwt和BeautifulSoup库实现爬取电影数据并存储在Excel表格中的功能。其中,getmanget函数用于获取磁力链接。

其中,下面这段代码我使用的是一个函数getmanget(linkurl),它接受一个参数linkurl,表示要爬取的网页链接。这个函数使用了requests库发送HTTP请求,然后使用BeautifulSoup库解析网页内容。

具体的实现逻辑如下:

  1. 发送GET请求,获取网页内容。
  2. 设置编码方式为网页的推测编码。
  3. 使用BeautifulSoup解析网页内容。
  4. 使用find_all方法查找所有的<a>标签。
  5. 遍历所有的<a>标签,如果标签中包含"magnet"字符串,则返回该标签的内容(磁力链接)。
  6. 如果没有找到包含"magnet"字符串的标签,则返回None

另外这段代码是用于获取磁力链接(magnet链接),而不是电影数据。

在这段代码中我定义了两个函数insertDB()saveExcel(),以及一些变量和对象的初始化操作。

saveExcel()函数用于将数据保存到Excel表格中。它接受三个参数:worksheet表示要保存数据的工作表对象,count表示当前要保存的行数,lst表示要保存的数据列表。

在代码的后面,定义了counttotal两个变量,count用于记录当前要保存的行数,total用于存储所有的数据。 

接下来,创建了一个Workbook对象,使用utf-8编码,并添加了一个名为sheet1的工作表对象。

这段是一个用于爬取电影数据的简单循环。它使用了requests库发送HTTP请求,然后使用BeautifulSoup库解析HTML响应。

在每次迭代中,它会生成一个新的URL,然后发送GET请求。然后,它会使用BeautifulSoup库找到具有特定class和style属性的元素,并将结果存储在变量ret中。

不过,这段代码只会爬取第2页的电影数据。虽然可以调整range函数的参数来指定我想要的页数范围。但懒得改了,就这样爬吧((*^_^*))

这段代码是用于从网页中提取电影信息并存储在一个列表中。下面是代码的解释:

  1. for x in ret::遍历一个名为ret的列表,其中包含了电影信息的HTML元素。

  2. info = []:创建一个空列表info,用于存储提取的电影信息。

  3. info.append(x.find("a").string):从当前HTML元素x中找到<a>标签,并提取其中的文本内容,然后将其添加到info列表中。这一行代码提取了电影的名称。

  4. pat = re.compile(r"译 名(.*)\n"):使用正则表达式创建一个模式对象pat,用于匹配电影的译名。

  5. ret = re.findall(pat, str(x)):使用模式对象pat在当前HTML元素x的字符串表示中进行匹配,返回所有匹配结果,并将其赋值给ret列表。

  6. for n in ret::遍历ret列表中的每个匹配结果。

  7. n = n.replace(u'\u3000',u''):将匹配结果中的全角空格替换为空字符串。

  8. print("译 名:",n):打印匹配到的译名。

  9. info.append(str(n).split("/")[0]):将匹配到的译名添加到info列表中,使用斜杠分割后取第一个部分。

  10. 类似的步骤被重复用于匹配和提取电影的年代、产地和类别信息,并将其添加到info列表中。

所以这段代码的作用就是从网页中提取电影的名称、译名、年代、产地和类别等信息,并将其存储在info列表中。

 

这部分代码是在爬取电影信息的基础上,通过获取电影详情页的链接,进一步获取下载地址信息。

  1. linkurl = "https://www.dygod.net/" + x.find("a").get("href"):构建电影详情页的链接,通过在基础链接后面加上电影列表中每个电影的链接。

  2. manget = getmanget(linkurl):调用名为getmanget的函数,传入电影详情页的链接作为参数,获取下载地址信息。

  3. if manget::检查是否成功获取到下载地址。

  4. print("下载地址:", manget):如果成功获取到下载地址,打印下载地址。

  5. info.append(str(manget)):将下载地址添加到info列表中。

这部分代码的作用是从电影详情页中获取下载地址,并将下载地址添加到info列表中。

 之后,总体检查一遍代码是否有拼写上的问题,就可以开始试着运行了。

运行结果如下:

再来看看excel表格:

 这就说明我们成功运行了爬虫,并把电影网站上的数据爬了下来并保存到excel表格中。

下面附上具体代码:

#-*- coding:utf-8 -*-
'''
@Author: 王熙元
@contact: 15209569556
@Time: 2023/8/1 14:30
@version: 1.0
'''
import requests
import re
import xlwt
from bs4 import BeautifulSoup
url = "https://www.dygod.net/html/gndy/dyzz/"
hd = {
 # 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
 'User-Agent': 'Mozilla/4.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
def getmanget(linkurl):
    res = requests.get(linkurl,headers=hd)
    res.encoding = res.apparent_encoding
    soup = BeautifulSoup(res.text,"html.parser")
    ret = soup.find_all("a")
    for n in ret:
        if"magnet" in str(n.string):
         return n.string
    return None
def insertDB():
    pass
def saveExcel(worksheet,count,lst):
    for i in range(6):
           worksheet.write(count,i,lst[i])
count = 0
total = []
workbook = xlwt.Workbook(encoding="utf-8")
workbook = workbook.add_sheet('sheet1')
for i in range(2,3):
     url = "https://www.dygod.net/html/gndy/dyzz/index_"+str(i)+".html"
     # print(url)
     # exit(0)
     res = requests.get(url,headers=hd)
     res.encoding = res.apparent_encoding
     soup = BeautifulSoup(res.text,"html.parser")
     ret = soup.find_all(class_="tbspan",style="margin-top:6px")
     for x in ret:
         info = []
         info.append(x.find("a").string)

         pat = re.compile(r"译 名(.*)\n")
         ret = re.findall(pat, str(x))
         for n in ret:
             n = n.replace(u'\u3000',u'')
             print("译 名:",n)
             info.append(str(n).split("/")[0])

         pat = re.compile(r"年 代(.*)\n")
         ret  =re.findall(pat,str(x))
         for n in ret:
             n = n.replace(u'\u3000',u'')
             print("年 代:",n)
             info.append(str(n))
         pat = re.compile(r"产 地(.*)\n")
         ret  =re.findall(pat,str(x))
         for n in ret:
             n = n.replace(u'\u3000',u'')
             print(r"产 地(.*)\n")
             info.append(str(n).split("/")[0])
         pat = re.compile(r"类 别(.*)\n")
         ret = re.findall(pat, str(x))
         for n in ret:
             n = n.replace(u'\u3000', u'')
             print(r"类 别:",str(n).split("/")[0])
             info.append(str(n).split("/")[0])
         linkurl = "https://www.dygod.net/"+x.find("a").get("href")
         manget = getmanget(linkurl)
         if manget:
            print("下载地址:",manget)
            info.append(str(manget))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值