在这篇教程中,我们将一步步介绍如何使用Python爬取喜剧电影的信息和图片。如果你是零基础或者对爬虫不太了解,也不用担心,我们将会详细解释每一个细节。
第一步:环境设置和库导入
首先,我们需要在计算机上安装Python和相关的库。Python是一种流行的编程语言,我们将利用它来编写我们的爬虫程序。同时,我们还需要安装一些Python库来帮助我们进行网络请求、解析网页等操作。这里我们需要安装的库有:
- requests:用于发送HTTP请求和获取网页内容。
- lxml:用于解析HTML和XML文档。
- re:Python的正则表达式库,用于从文本中提取信息。
- os:用于文件和目录操作。
- time:用于控制程序的时间间隔。
- random:用于生成随机数,例如用于模拟用户操作时的随机等待时间。
你可以使用pip来安装这些库,比如在命令行中输入以下命令:
pip install requests lxml
第二步:设置请求头部信息
在发送HTTP请求时,为了避免被网站识别为机器人而拒绝访问,我们需要设置一个合适的请求头部信息。请求头部信息中包含了我们访问网站时的用户代理信息,模拟了一个真实的浏览器访问。
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}
第三步:发送HTTP请求获取网页内容
我们使用requests
库来发送HTTP请求,并获取网页的HTML内容。这里以一个电影网站为例,假设电影列表页面的URL为https://example.com/movies
。
import requests
url = 'https://example.com/movies'
res = requests.get(url=url, headers=header)
html_text = res.text
第四步:解析网页内容提取信息
接下来,我们需要解析HTML内容,提取我们需要的信息,比如电影的标题、链接等。这里我们可以使用正则表达式或者更方便的lxml
库来进行解析。
from lxml import etree
tree = etree.HTML(html_text)
movie_titles = tree.xpath('//div[@class="movie-title"]/a/text()')
movie_links = tree.xpath('//div[@class="movie-title"]/a/@href')
第五步:访问电影详情页面获取更多信息
现在我们有了电影的标题和链接,接下来我们可以访问每个电影的详情页面,获取更多详细信息,比如电影的描述、图片等。
for link in movie_links:
movie_res = requests.get(url=link, headers=header)
movie_html_text = movie_res.text
# 解析电影详情页面,获取电影描述、图片等信息
第六步:保存信息到文件
最后一步是将我们获取的电影信息保存到文件中,比如保存电影标题和链接到一个文本文件,保存电影图片到本地文件夹等。
# 将电影标题和链接保存到文本文件
with open('movie_list.txt', 'w', encoding='utf-8') as file:
for title, link in zip(movie_titles, movie_links):
file.write(f'{title}: {link}\n')
# 保存电影图片到本地文件夹
for i, image_link in enumerate(movie_image_links, start=1):
image_res = requests.get(image_link, headers=header)
with open(f'movie_images/{i}.jpg', 'wb') as image_file:
image_file.write(image_res.content)
部分代码
import os
import time
import re
from urllib.parse import urljoin
from lxml import etree
import requests
import random
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}
# 设置爬取的页数
for i in range(1, 25):
url = f'https://dytt89.com/14/index_{i}.html'
# https://www.dytt89.com/5/
# 。。。。。。。。。。。。。。
# 使用正则表达式提取所有匹配的<a>标签中的href、class和title
matches = re.findall(r'<a\le=["\'](.*?)["\']>(.*?)</a>',
html_text)
# 检查匹配结果并输出内容
for match in matches:
href_content = match[0]
print(f'{title_content}href内容: {href_content}')
# print(html_text)
if response.content is None:
print(f'{href_content}请求出现异常')
time.sleep(random.randint(1, 3))
try:
response = requests.session().get(src_content, headers=header, timeout=100)
except:
try:
time.sleep(1)
response = requests.session().get(src_content, headers=header, timeout=100)
except:
print('22222')
# 确保保存图片的文件夹存在
if not os.path.exists(f"喜剧片/{title_content}"):
os.makedirs(f"喜剧片/{title_content}")
# 根据图片的位置命名文件
if i == 1:
filename = "封面.jpg"
elif i == 2:
filename = "截图.jpg"
else:
filename = f"图片_{i}.jpg"
# 写入图片文件
with open(f"喜剧片/{title_content}/{filename}", "wb") as f:
f.write(response.content)
print(f'已保存图片{title_content}: {filename} - {src_content}')
if not os.path.exists(f"喜剧片/{title_content}"):
os.makedirs(f"喜剧片/{title_content}")
# 保存处理后的文本到 "简介.txt" 文件
with open(f"喜剧片/{title_content}/简介.txt", 'w', encoding='utf-8') as file:
print(f"{title_content}种子已保存")
# break
结果展示
到此为止,我们已经完成了一个简单的Python爬虫程序,可以爬取喜剧电影信息和图片,并将信息保存到文件中。当然,实际应用中还会有更多的细节和处理方式,但这里的教程已经给出了一个基本的框架和思路。希望对你有所帮助!