一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)

本文将详细讲解如何从零开始编写一个Python爬虫,即使是完全没接触过编程的朋友也能理解.

一、爬虫的基本流程
发送请求:爬虫向目标网页发送请求,获取网页内容.

解析网页:从返回的网页内容中提取你需要的信息.

保存数据:将提取到的信息保存到文件或数据库中,以便后续分析.

二、常用爬虫库
在Python中,有两个非常流行的库用于爬虫开发:

requests:用于发送网络请求,获取网页内容.

BeautifulSoup:用于解析网页内容,提取需要的数据.

1. 安装库
首先,你需要安装这两个库.在命令行中执行以下命令:

pip install requests beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple
三、简单爬虫示例

接下来,我们会编写一个简单的爬虫,从一个网页上获取数据.

1. 获取网页内容

第一步是使用 requests 库来获取网页的内容.我们以获取百度首页为例.

import requests
 
# 发送请求获取网页内容
url = 'https://www.baidu.com'
response = requests.get(url)
 
# 打印网页内容
print(response.text)

解释:
requests.get(url) 用于向指定网址发送请求并获取网页内容.

response.text 返回网页的HTML代码.

运行后,你会看到大量的HTML代码,这就是百度首页的内容.

2. 解析网页内容
获取网页内容后,我们需要用 BeautifulSoup 库来解析HTML,提取我们需要的信息.接下来我们解析百度首页的标题.

from bs4 import BeautifulSoup
 
# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
 
# 获取标题
title = soup.title.text
print('网页标题:', title)
解释:
  • BeautifulSoup(response.text, 'html.parser') 用于解析HTML内容.

  • soup.title.text 返回网页的标题.

  • 输出:

    makefile
     
     
    网页标题: 百度一下,你就知道
    3. 提取更多信息

    让我们继续提取网页中的链接(<a>标签中的 href 属性).这非常有用,例如你想抓取某个网站上的所有文章链接.

    # 获取所有的<a>标签
    links = soup.find_all('a')
     
    # 打印所有链接
    for link in links:
        href = link.get('href')
        print(href)

    解释:
    soup.find_all('a') 用于获取网页中的所有链接.

    link.get('href') 获取每个链接的 href 属性,也就是网址.

    四、爬虫的分类
    1. 简单爬虫(静态网页)
    如果网页是静态的,所有的数据直接在HTML代码中呈现,这种网页最容易爬取.以上示例就是一个典型的静态网页爬虫.

    2. 动态爬虫(处理JavaScript生成的内容)
    有些网页的数据不是直接在HTML中,而是通过JavaScript动态生成的.这类网页需要更复杂的处理方式,通常我们会使用 Selenium 这样的库来模拟浏览器操作.

    安装 Selenium:

    pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    Selenium 可以像真实的用户一样与网页交互,甚至可以点击按钮、滚动页面等.比如要爬取动态生成的数据,我们可以使用Selenium来加载网页.

    示例:
    from selenium import webdriver
     
    # 设置浏览器驱动路径
    driver = webdriver.Chrome()
     
    # 打开网页
    driver.get('https://www.example.com')
     
    # 获取网页标题
    print(driver.title)
     
    # 关闭浏览器
    driver.quit()
    3. 爬虫框架(Scrapy)

    当你需要大规模爬取数据时,可以使用专门的爬虫框架——Scrapy.Scrapy 是一个强大的爬虫框架,具有异步、高效的特点,适合用于构建复杂的爬虫.

    安装 Scrapy:
    pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    五、爬虫常见问题及解决方案
    1. 网页反爬机制

    有些网站不允许爬虫访问,通常会通过检测请求头或IP地址来防止爬虫访问.为了绕过这种限制,我们可以伪装成正常用户.

    解决方法:添加请求头
    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'
    }
     
    response = requests.get(url, headers=headers)
    2. 延迟访问

    频繁访问某个网站可能会触发反爬机制,我们可以通过设置延迟避免这种问题.

    import time
     
    # 延迟2秒后发送下一个请求
    time.sleep(2)
    3. 代理IP

    如果网站通过检测IP地址限制访问,我们可以使用代理IP.

    proxies = {
        'http': 'http://10.10.1.10:3128',
        'https': 'https://10.10.1.10:1080',
    }
     
    response = requests.get(url, proxies=proxies)
    六、保存数据

    当我们提取到需要的信息后,通常需要将数据保存起来,常见的保存方式有保存到CSV文件数据库.

    1. 保存到CSV文件
    import csv
     
    # 保存数据到CSV文件
    with open('data.csv', 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(['标题', '链接'])  # 写入表头
        for link in links:
            writer.writerow([link.text, link.get('href')])
    2. 保存到数据库

    可以使用 SQLite 或其他数据库,将数据保存到数据库中.

    import sqlite3
     
    # 连接数据库(如果不存在会自动创建)
    conn = sqlite3.connect('data.db')
    cursor = conn.cursor()
     
    # 创建表
    cursor.execute('CREATE TABLE IF NOT EXISTS links (title TEXT, href TEXT)')
     
    # 插入数据
    for link in links:
        cursor.execute('INSERT INTO links (title, href) VALUES (?, ?)', (link.text, link.get('href')))
     
    # 提交事务并关闭连接
    conn.commit()
    conn.close()

    七、总结
    爬虫的基本流程:发送请求,解析网页,提取并保存数据.

    常用库:requests 用于发送请求,BeautifulSoup 用于解析HTML.

    进阶技术:处理动态网页需要用到 Selenium,而大规模爬取可以使用 Scrapy 框架.

    应对反爬:通过伪装请求头、设置延迟以及使用代理IP等方式绕过反爬机制.

    八、参考文档
    Python Requests 文档

    BeautifulSoup 官方文档

    希望这篇文章能够帮助你轻松入门 Python 爬虫,开始获取网页上的数据!


    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

    作者:风吹花又落·

    物联沃分享整理
    物联沃-IOTWORD物联网 » 一篇最全Python 爬虫超详细讲解(零基础入门,适合小白)

    发表回复