写在前面:爬虫可能会导致严重的后果,包括被起诉、罚款甚至监禁。我建议你遵守道德和法律规定,并尊重他人的权利和隐私。
要确定一个网站是否可以使用爬虫进行数据抓取,需要考虑以下几个方面:
- 法律法规限制:在某些国家或地区,爬虫行为可能会受到法律限制。因此,你需要了解相关法律法规,确保你的爬虫行为合法合规。
- 网站robots.txt文件:大多数网站都有一个名为robots.txt的文件(域名/robots.txt,例如:https://www.baidu.com/robots.txt),用于告知爬虫程序应该遵循的规则。你可以查看该文件,了解是否允许你的爬虫程序进行数据抓取
- 网站反爬虫机制:为了保护网站数据,很多网站都会设置反爬虫机制,如IP限制、频率限制等。如果你尝试使用爬虫程序进行数据抓取,可能会遇到访问限制或封禁的情况
- 隐私和安全问题:在使用爬虫程序抓取网站数据时,需要注意隐私和安全问题。如果网站包含敏感信息或个人数据,那么你需要确保你的爬虫程序不会泄露这些信息。
直接上代码 U·ェ·U
# 引入相关库
import requests
import pandas as pd
from bs4 import BeautifulSoup
import time
# 1.定义要爬取的url连接
url = 'https://top.baidu.com/board?tab=movie'
# 2.获取返回对象response,这里没有指定header信息,如果网站有反爬机制,请对应添加
respose = requests.get(url)
# 获取返回对象的HTML内容
data = respose.text
# 3.使用bs4解析对象
soup = BeautifulSoup(data, "lxml")
# 4.获取所需信息
# 4.1电影名称,使用字符串方法.strip()去除空格
name_list = [x.get_text().strip() for x in soup.select('.title_dIF3B')]
# 4.2电影热搜排名,使用get_text方法的strip参数去空格
index_list = [x.get_text(strip=True) for x in soup.select('.index_1Ew5p')]
# 4.3电影热搜指数
hotScore_list = [x.get_text(strip=True) for x in soup.select('.hot-index_1Bl1a')]
# 4.4电影描述
desc_list = [x.get_text(strip=True) for x in soup.select('.desc_3CTjT')]
# 4.5详情地址(其实是在百度中搜索电影)
rawUrl_list = [x.get_text(strip=True) for x in soup.select('.title_dIF3B')]
# 4.6其它内容(包括电影类型和主演)
other_list = [x.get_text(strip=True) for x in soup.select('.intro_1l0wp')]
# 4.6.1电影类型
type_list = [other_list[x].strip('类型:') for x in range(len(other_list)) if x % 2 == 0]
# 4.6.2电影主演
actor_list = [other_list[x].strip('演员:') for x in range(len(other_list)) if x % 2 != 0]
# 5.定义DataFrame所需的数据格式
movies_hot = {
"热搜排名": index_list,
"名称": name_list,
"热搜指数": hotScore_list,
"类型": type_list,
"主演": actor_list,
"详情": desc_list,
"详情地址": rawUrl_list
}
# 6.创建为DataFrame对象
df = pd.DataFrame(movies_hot, index=movies_hot["热搜排名"])
# 7.保存为csv文件,index=False表示保存的csv文件无索引列
df.to_csv(f'./baidu_hot_movies_{time.strftime("%Y%m%d")}.csv',index=False)