2401_87178023 2024-10-16 15:58 采纳率: 25%
浏览 11
已结题

使用Scrapy框架和XPath语言改写豆瓣电影Top250存为本地csv文件,另存一份到MySQL

img


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

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-16 17:19
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要从豆瓣电影Top 250获取数据并将其存储为本地CSV文件,同时将数据保存到MySQL数据库中,你需要执行以下步骤:

    步骤1:安装必要的库

    确保已经安装了requestslxmlmysql-connector-python等库。

    pip install requests
    pip install lxml
    pip install mysql-connector-python
    

    步骤2:编写爬虫脚本

    首先,创建一个名为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数据库。

    步骤3:运行爬虫脚本

    在命令行中,运行doubandy.py以开始抓取过程。

    步骤4:检查结果

    运行完成后,你应该会看到一个名为movies.csv的文件,其中包含从豆瓣Top 250获取的数据。此外,它还会在MySQL数据库中创建一个名为movies的新表,并插入所有收集到的信息。

    注意事项

    • 确保替换'your_password'为实际的MySQL数据库密码。
    • 确保movies.csv文件路径正确无误。
    • 调试过程中可能遇到的问题是网络连接问题或其他错误。确保你的网络连接正常且服务器上运行着MySQL服务。

    这个示例脚本提供了一个基本的框架,但具体实现细节可能会根据豆瓣网站的实际结构有所不同。例如,URL可能需要调整以适应特定的页面布局。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 10月16日