
使用Scrapy框架和XPath语言改写豆瓣电影Top250存为本地csv文件,一直显示403不能解决了,求解决办法

以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
要从豆瓣电影Top 250获取数据并将其存储为本地CSV文件,同时将数据保存到MySQL数据库中,你需要执行以下步骤:
确保已经安装了requests、lxml和mysql-connector-python等库。
pip install requests
pip install lxml
pip install mysql-connector-python
首先,创建一个名为doubandy.py的文件,并在其中编写以下代码:
import requests
from lxml import html
import csv
import pymysql
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
}
def get_movie_data():
url = "https://movie.douban.com/top250?start="
start = 0
while True:
# 获取网页源代码
response = requests.get(f"{url}{start}", headers=headers)
if response.status_code == 200:
# 使用lxml解析HTML
tree = html.fromstring(response.text)
for movie in tree.xpath("//div[@class='item']"):
title = movie.xpath(".//span[@class='title'][1]/a/text()")
rating = movie.xpath(".//span[@class='rating_num']/text()")[0]
info = movie.xpath(".//p[1]//text()")
yield {
'Title': title,
'Rating': rating,
'Info': ' '.join(info),
}
else:
print("Error:", response.status_code)
break
start += 25
def save_to_csv(data):
with open('movies.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Title', 'Rating', 'Info'])
writer.writerows(data)
def save_to_mysql(data):
try:
connection = pymysql.connect(
host='localhost',
user='root',
password='your_password',
database='test_db'
)
cursor = connection.cursor()
insert_query = """
INSERT INTO movies(title, rating, info)
VALUES (%s, %s, %s);
"""
cursor.executemany(insert_query, data)
connection.commit()
print("Data inserted successfully into MySQL.")
except Exception as e:
print("An error occurred:", str(e))
finally:
cursor.close()
connection.close()
if __name__ == "__main__":
data = list(get_movie_data())
save_to_csv(data)
save_to_mysql(data)
在这个脚本中,我们定义了一个函数get_movie_data()用于提取页面中的电影信息,包括标题、评分和简介。然后,我们创建两个函数save_to_csv()和save_to_mysql()分别负责将数据保存为CSV文件和MySQL数据库。
在命令行中,运行doubandy.py以开始抓取过程。
运行完成后,你应该会看到一个名为movies.csv的文件,其中包含从豆瓣Top 250获取的数据。此外,它还会在MySQL数据库中创建一个名为movies的新表,并插入所有收集到的信息。
'your_password'为实际的MySQL数据库密码。movies.csv文件路径正确无误。这个示例脚本提供了一个基本的框架,但具体实现细节可能会根据豆瓣网站的实际结构有所不同。例如,URL可能需要调整以适应特定的页面布局。