首页 > 编程语言 >python-爬虫入门

python-爬虫入门

时间:2024-09-22 18:12:09浏览次数:1  
标签:入门 python movie html 爬虫 find num class

前言:由于个人负责的运维组,其中有个同事每回在某个项目发版更新后,需手动在k8s容器平台web界面上复制出几百个微服务的名称以及镜像版本等信息,用来更新微服务清单,个人决定抽时间写个爬虫脚本自动完成手动执行的任务。由于公司信息需保密,这里介绍个简单入门的爬虫脚本做为范例。

Python爬虫:通常指的是使用Python语言编写的网络爬虫程序。网络爬虫(Web crawler)是一种自动化的程序,用于在互联网上浏览和检索信息。爬虫可以访问网站,获取网页内容,然后从这些内容中提取有用的数据。以下是Python爬虫的一些基本概念和组成部分:

  1. 请求网页:使用HTTP库(如requests)向目标网站发送请求,获取网页内容。

  2. 解析内容:解析获取到的网页内容,通常使用HTML解析库(如BeautifulSouplxml)来提取所需的数据。

  3. 数据提取:从解析后的内容中提取有用的信息,如文本、链接、图片等。

  4. 存储数据:将提取的数据保存到文件、数据库或其他存储系统中。

  5. 遵守规则:尊重网站的robots.txt文件,遵守网站的爬虫政策,避免对网站造成不必要的负担。

  6. 用户代理:模拟浏览器行为,设置用户代理(User-Agent),以避免被网站识别为爬虫。

  7. 处理重定向:处理HTTP重定向,确保爬虫能够正确地跟踪到最终的网页地址。

  8. 错误处理:处理网络请求中可能出现的各种错误,如超时、连接错误等。

  9. 多线程/异步:使用多线程或异步IO(如asyncio库)来提高爬虫的效率。

  10. 数据清洗:对提取的数据进行清洗和格式化,以便于后续的分析和使用。

  11. 遵守法律:在进行网络爬虫操作时,遵守相关法律法规,不侵犯版权和隐私。

Python爬虫的应用非常广泛,包括但不限于:

  • 数据挖掘:从网页中提取大量数据,用于市场研究、消费者行为分析等。
  • 信息聚合:收集特定主题的信息,构建信息聚合平台。
  • 价格监控:监控电商平台的价格变化,进行价格比较。
  • 新闻监控:收集新闻网站的最新新闻,用于新闻摘要或新闻分析。

Python爬虫的开发需要考虑到效率、准确性和合法性,以确保爬虫程序能够稳定、高效地运行,同时不违反法律法规和网站政策。

抓取豆瓣前250高分电影爬虫脚本(名称、评分、评价人数):

import requests
from bs4 import BeautifulSoup
import csv

# 请求头部
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}

# 解析页面函数
def parse_html(html):
    soup = BeautifulSoup(html, 'lxml')
    movie_list = soup.find('ol', class_='grid_view').find_all('li')
    for movie in movie_list:
        title = movie.find('div', class_='hd').find('span', class_='title').get_text()
        rating_num = movie.find('div', class_='star').find('span', class_='rating_num').get_text()
        comment_num = movie.find('div', class_='star').find_all('span')[-1].get_text()
        yield {
            '电影名称': title,
            '评分': rating_num,
            '评价人数': comment_num
        }

# 保存数据函数
def save_data():
    with open('douban_movie_top250.csv', 'w', newline='', encoding='utf-8-sig') as f:
        writer = csv.writer(f)
        writer.writerow(['电影名称', '评分', '评价人数'])
        for i in range(10):
            url = 'https://movie.douban.com/top250?start=' + str(i * 25)
            response = requests.get(url, headers=headers)
            for item in parse_html(response.text):
                f.write(str(item) + '\n')

if __name__ == '__main__':
    save_data()

执行:

结果:

以下是Python爬虫脚本的逐条讲解:

  1. 导入必要的库:

    import requests
    from bs4 import BeautifulSoup
    import csv
    
    • requests: 用于发送HTTP请求。
    • BeautifulSoup: 从bs4库中导入,用于解析HTML文档。
    • csv: 用于写入CSV文件。
  2. 设置请求头部:

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    
    • 这里定义了一个字典headers,包含User-Agent,用于模拟浏览器请求,避免被网站识别为爬虫。
  3. 定义解析页面的函数:

    def parse_html(html):
        soup = BeautifulSoup(html, 'lxml')
        movie_list = soup.find('ol', class_='grid_view').find_all('li')
        for movie in movie_list:
            title = movie.find('div', class_='hd').find('span', class_='title').get_text()
            rating_num = movie.find('div', class_='star').find('span', class_='rating_num').get_text()
            comment_num = movie.find('div', class_='star').find_all('span')[-1].get_text()
            yield {
                '电影名称': title,
                '评分': rating_num,
                '评价人数': comment_num
            }
    
    • parse_html函数接收一个HTML字符串作为参数。
    • 使用BeautifulSoup解析HTML,指定lxml作为解析器。
    • 找到所有电影的列表(ol标签,类名为grid_view),然后遍历每个电影的HTML元素(li标签)。
    • 对于每个电影,提取电影名称、评分和评价人数,使用get_text()方法获取文本内容。
    • 使用yield返回一个包含电影信息的字典。
  4. 定义保存数据的函数:

    def save_data():
        with open('douban_movie_top250.csv', 'w', newline='', encoding='utf-8-sig') as f:
            writer = csv.writer(f)
            writer.writerow(['电影名称', '评分', '评价人数'])
            for i in range(10):
                url = 'https://movie.douban.com/top250?start='  + str(i * 25)
                response = requests.get(url, headers=headers)
                for item in parse_html(response.text):
                    f.write(str(item) + '\n')
    
    • save_data函数用于保存数据到CSV文件。
    • 使用with open(...)打开文件,确保文件在操作完成后自动关闭。
    • 创建一个csv.writer对象用于写入CSV文件。
    • 写入列标题。
    • 循环10次,每次请求豆瓣电影Top 250的不同部分(通过修改URL中的start参数)。
    • 对于每个请求,调用parse_html函数解析响应的HTML内容,并遍历返回的电影信息。
    • 将每个电影的信息转换为字符串并写入文件,每个信息后面添加换行符。
  5. 主程序入口:

    if __name__ == '__main__':
        save_data()
    
    • 这是Python程序的主入口点。
    • 如果这个脚本作为主程序运行,调用save_data函数开始执行。

这个脚本的目的是爬取豆瓣电影Top 250的信息,并将其保存到CSV文件中。每个电影的信息包括名称、评分和评价人数。

标签:入门,python,movie,html,爬虫,find,num,class
From: https://www.cnblogs.com/zhoutuo/p/18425621

相关文章

  • 强化学习基础:主要算法框架与Python实现示例
    创作不易,您的打赏、关注、点赞、收藏和转发是我坚持下去的动力!强化学习(ReinforcementLearning,RL)是一种通过与环境交互来学习策略的机器学习方法。RL主要包含以下几个关键组件:状态(State)、动作(Action)、奖励(Reward)、策略(Policy)和价值函数(ValueFunction)。常见的强化学习主流......
  • Python语言的基本要素
    1.Python的语句(1)程序语句中,所有的字符都必须是英文字符(半角),不能是中文字符(全角)。(2)"#"后是注释,注释的内容不执行。("ctr+/"可加多行注释)2.常量(1)常量表示固定不变的数据(值)(2)常见常量有:数值型(整数)、字符串、布尔型(true表示真、false表示假)、空(None表示啥也不是)3.变量(1)变量是......
  • CSP-J 2024 入门组初赛第一轮初赛试题及答案解析
    CSP-J2024入门组初赛第一轮初赛试题及答案解析一、单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)132位int类型的存储范围是()A-2147483647~+2147483647B-2147483647~+2147483648C-2147483648~+2147483647D-2147483648~+2147483648......
  • 如何用3个月零基础入门网络安全?_网络安全零基础怎么学习
      前言写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。文章的宗旨是:1.指出一些自学的误区2.提供客观可行的学习表3.推荐我认为适合小白学习的资源.大佬绕道哈!→点击获取网络安全资料·攻略←一、自学网络安全学习的误区和陷阱1.......
  • 如何用3个月零基础入门网络安全?_网络安全零基础怎么学习
      前言写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。文章的宗旨是:1.指出一些自学的误区2.提供客观可行的学习表3.推荐我认为适合小白学习的资源.大佬绕道哈!→点击获取网络安全资料·攻略←一、自学网络安全学习的误区和陷阱1.......
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
      学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.......
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
      学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.......
  • 书生大模型实战(从入门到进阶)L0-Python
    目录Python实现WordCountVscode连接InternStudiodebugdebug单个python文件在vscode使用命令行进行debug本文是对书生大模型L0-Python部分的学习和实现,学习地址如下:学习地址:‬​​​​⁠​​‌⁠‍⁠​‬​​​​​​​⁠‬​​​⁠​​‌​​​​​‍​​​⁠​​​学......
  • 【python】石头剪刀布,模拟十次并统计获胜次数
    解决问题下面是一个使用Python编写的剪刀、石头、布游戏的程序,包含玩家与计算机对战和模拟计算机对战10次的功能。importrandomdefget_computer_choice():  returnrandom.randint(0,2)defget_user_choice():  choice=input("请输入剪刀(0)、石头(1)、布(......
  • Python中的同一运算符与整数缓存问题
    在Python中,is运算符与==运算符的使用常常引发混淆。特别是在处理小整数时,Python会进行整数缓存,以提高性能。本文将深入探讨同一运算符(is)与相等运算符(==)的区别,并详细阐述整数缓存的问题,通过具体的代码示例和运行结果来帮助理解。1.同一运算符与相等运算符is运算符:判断两个对象是否......