Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序,用于从网站抓取数据。Python 凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识,并实现一个简单的爬虫项目。


1. 什么是网络爬虫?

网络爬虫(Web Crawler)是一种通过网络协议(如 HTTP/HTTPS)获取网页内容,并提取其中有用信息的程序。常见的爬虫用途包括:

  • 收集商品价格和评价。
  • 抓取新闻或博客内容。
  • 统计数据分析。
  • 爬虫工作原理
    1. 发送 HTTP 请求到目标网站。
    2. 获取服务器返回的 HTML 页面。
    3. 解析 HTML 内容,提取所需数据。
    4. 保存数据以供后续使用。

    2. 爬虫的基本工具

    在 Python 中,我们可以使用以下工具和库来构建爬虫:

    2.1 requests

    requests 是一个强大的 HTTP 库,用于发送网络请求,获取网页内容。

    安装:

    pip install requests
    

    示例:

    import requests 
    url = "https://example.com" 
    response = requests.get(url) 
    print(response.text) # 打印网页内容
    
    2.2 BeautifulSoup

    BeautifulSoup 是一个解析 HTML 和 XML 的库,用于从网页中提取数据。

    安装:

    pip install beautifulsoup4
    

    示例:

    from bs4 import BeautifulSoup
    
    html = "<html><body><h1>Hello, World!</h1></body></html>"
    soup = BeautifulSoup(html, "html.parser")
    print(soup.h1.text)  # 输出 "Hello, World!"
    
    2.3 pandas

    pandas 是一个用于数据处理和分析的库,适合将爬取的数据保存到 CSV 或 Excel。

    安装:

    pip install pandas
    

    示例:

    import pandas as pd
    
    data = {"Title": ["Example"], "Link": ["https://example.com"]}
    df = pd.DataFrame(data)
    df.to_csv("output.csv", index=False)
    

    3. 爬虫案例:抓取豆瓣电影排行榜

    下面我们将构建一个爬虫,从豆瓣电影的网页抓取电影排行榜。

    3.1 准备工作

    目标网址: https://movie.douban.com/top250

    我们将抓取以下信息:

  • 电影名称
  • 评分
  • 引言
  • 3.2 代码实现
    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    
    # 爬取一个页面的数据
    def scrape_page(url):
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}
        response = requests.get(url, headers=headers)
        soup = BeautifulSoup(response.text, "html.parser")
        
        movies = []
        for item in soup.find_all("div", class_="item"):
            title = item.find("span", class_="title").text
            rating = item.find("span", class_="rating_num").text
            quote = item.find("span", class_="inq").text if item.find("span", class_="inq") else "N/A"
            movies.append({"Title": title, "Rating": rating, "Quote": quote})
        
        return movies
    
    # 主程序:爬取多页
    def main():
        base_url = "https://movie.douban.com/top250?start={}"
        all_movies = []
        
        for i in range(0, 250, 25):  # 每页 25 部电影
            url = base_url.format(i)
            print(f"Scraping: {url}")
            movies = scrape_page(url)
            all_movies.extend(movies)
        
        # 保存为 CSV 文件
        df = pd.DataFrame(all_movies)
        df.to_csv("douban_top250.csv", index=False)
        print("Scraping complete! Data saved to douban_top250.csv")
    
    if __name__ == "__main__":
        main()
    
    3.3 代码解析
    1. 设置请求头: 模拟浏览器访问,避免被反爬机制屏蔽。

    2. BeautifulSoup 提取内容: 使用 findfind_all 定位 HTML 标签,提取标题、评分和引言。

    3. 循环抓取多页: 构造分页 URL,逐页爬取。

    4. 保存为 CSV: 使用 pandas 将数据存储为 CSV 文件。


    4. 运行与结果

    运行程序后,将生成 douban_top250.csv 文件,内容如下:


    5. 注意事项

    5.1 遵守爬虫的礼仪
    1. 合理设置延迟: 在抓取页面时加入适当的延时,避免对服务器造成压力。

    2. 检查 robots.txt 访问目标网站的 https://example.com/robots.txt 查看允许抓取的内容。

    3. 请求头伪装: 使用 User-Agent 模拟浏览器访问。

    5.2 反爬机制应对

    如果遇到反爬机制,可以尝试:

  • 使用代理 IP。
  • 处理动态内容(如 JavaScript 加载的页面)。
  • 使用更高级的库如 seleniumPlaywright

  • 6. 总结与扩展

    通过本文,我们学习了使用 Python 构建基本爬虫的流程,并完成了一个抓取豆瓣电影 Top250 的项目。你可以将爬虫技术扩展到更复杂的应用场景,比如:

  • 动态加载数据的网站(如使用 seleniumrequests-html)。
  • 数据清洗与可视化(结合 pandasmatplotlib)。
  • 大规模爬取(结合分布式爬虫框架如 Scrapy)。
  • 在实际应用中,记得遵守法律法规和网站的爬虫协议,合理使用网络爬虫技术!

    作者:m0_66323401

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python 爬虫入门教程:从零构建你的第一个网络爬虫

    发表回复