python基础阶段项目练习:
1、写一个网络爬虫程序
2、爬取目标网站数据,关键项不能少于5项。
3、存储数据到数据库,可以进行增删改查操作。
4、扩展:将库中数据进行可视化展示。
内容:
我们可以使用requests、re、xlwt和BeautifulSoup库实现爬取电影数据并存储在Excel表格中的功能。其中,getmanget函数用于获取磁力链接。
其中,下面这段代码我使用的是一个函数getmanget(linkurl)
,它接受一个参数linkurl
,表示要爬取的网页链接。这个函数使用了requests
库发送HTTP请求,然后使用BeautifulSoup
库解析网页内容。
具体的实现逻辑如下:
- 发送GET请求,获取网页内容。
- 设置编码方式为网页的推测编码。
- 使用
BeautifulSoup
解析网页内容。 - 使用
find_all
方法查找所有的<a>
标签。 - 遍历所有的
<a>
标签,如果标签中包含"magnet"字符串,则返回该标签的内容(磁力链接)。 - 如果没有找到包含"magnet"字符串的标签,则返回
None
。
另外这段代码是用于获取磁力链接(magnet链接),而不是电影数据。
在这段代码中我定义了两个函数insertDB()
和saveExcel()
,以及一些变量和对象的初始化操作。
saveExcel()
函数用于将数据保存到Excel表格中。它接受三个参数:worksheet
表示要保存数据的工作表对象,count
表示当前要保存的行数,lst
表示要保存的数据列表。
在代码的后面,定义了count
和total
两个变量,count
用于记录当前要保存的行数,total
用于存储所有的数据。
接下来,创建了一个Workbook
对象,使用utf-8
编码,并添加了一个名为sheet1
的工作表对象。
这段是一个用于爬取电影数据的简单循环。它使用了requests库发送HTTP请求,然后使用BeautifulSoup库解析HTML响应。
在每次迭代中,它会生成一个新的URL,然后发送GET请求。然后,它会使用BeautifulSoup库找到具有特定class和style属性的元素,并将结果存储在变量ret
中。
不过,这段代码只会爬取第2页的电影数据。虽然可以调整range
函数的参数来指定我想要的页数范围。但懒得改了,就这样爬吧((*^_^*))
这段代码是用于从网页中提取电影信息并存储在一个列表中。下面是代码的解释:
-
for x in ret:
:遍历一个名为ret
的列表,其中包含了电影信息的HTML元素。 -
info = []
:创建一个空列表info
,用于存储提取的电影信息。 -
info.append(x.find("a").string)
:从当前HTML元素x
中找到<a>
标签,并提取其中的文本内容,然后将其添加到info
列表中。这一行代码提取了电影的名称。 -
pat = re.compile(r"译 名(.*)\n")
:使用正则表达式创建一个模式对象pat
,用于匹配电影的译名。 -
ret = re.findall(pat, str(x))
:使用模式对象pat
在当前HTML元素x
的字符串表示中进行匹配,返回所有匹配结果,并将其赋值给ret
列表。 -
for n in ret:
:遍历ret
列表中的每个匹配结果。 -
n = n.replace(u'\u3000',u'')
:将匹配结果中的全角空格替换为空字符串。 -
print("译 名:",n)
:打印匹配到的译名。 -
info.append(str(n).split("/")[0])
:将匹配到的译名添加到info
列表中,使用斜杠分割后取第一个部分。 -
类似的步骤被重复用于匹配和提取电影的年代、产地和类别信息,并将其添加到
info
列表中。
所以这段代码的作用就是从网页中提取电影的名称、译名、年代、产地和类别等信息,并将其存储在info
列表中。
这部分代码是在爬取电影信息的基础上,通过获取电影详情页的链接,进一步获取下载地址信息。
-
linkurl = "https://www.dygod.net/" + x.find("a").get("href")
:构建电影详情页的链接,通过在基础链接后面加上电影列表中每个电影的链接。 -
manget = getmanget(linkurl)
:调用名为getmanget
的函数,传入电影详情页的链接作为参数,获取下载地址信息。 -
if manget:
:检查是否成功获取到下载地址。 -
print("下载地址:", manget)
:如果成功获取到下载地址,打印下载地址。 -
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))