从零开始构建一个简单的Web爬虫:Python实战教程

打印 上一主题 下一主题

主题 934|帖子 934|积分 2802

        在信息爆炸的时代,怎样高效地从互联网中获取所需数据成为了一项重要技能。Web爬虫(Web Crawler)作为一种自动化工具,可以帮助我们从网页中提取有价值的信息。本文将带你从零开始,利用Python构建一个简单的Web爬虫,并通过实际案例演示其应用。



一、什么是Web爬虫?

        Web爬虫是一种自动化程序,能够模仿人类浏览网页的行为,从网页中提取数据并存储下来。常见的应用场景包罗:

  • 数据采集:从电商网站抓取商品信息,从消息网站获取最新文章。
  • 搜索引擎:搜索引擎通过爬虫抓取网页内容并建立索引。
  • 监控与预警:监控竞争对手的网站变化,或跟踪特定信息的更新。



二、技术选型:为什么选择Python?

Python是构建Web爬虫的首选语言,重要原因如下:

  • 丰富的库支持:Python拥有强大的第三方库,如requests、BeautifulSoup、Scrapy等,可以轻松实现网页抓取和解析。
  • 简单易学:Python语法简洁,适合初学者快速上手。
  • 社区活跃:Python拥有巨大的开发者社区,碰到题目时可以快速找到解决方案。



三、实战案例:抓取豆瓣电影Top250

目标:从豆瓣电影Top250页面(豆瓣电影 Top 250)中提取电影名称、评分和短评,并将结果生存到CSV文件中。

四、实现步调

1. 安装须要的库

在开始之前,我们需要安装以下Python库:


  • requests:用于发送HTTP哀求,获取网页内容。
  • BeautifulSoup:用于解析HTML文档,提取所需数据。
  • pandas:用于将数据生存为CSV文件。
可以通过以下命令安装这些库:
  1. pip install requests beautifulsoup4 pandas
复制代码
2. 分析目标网页

打开豆瓣电影Top250页面,按F12打开开发者工具,查看网页布局。可以发现,每部电影的信息都包含在一个<div class="item">标签中,电影名称、评分和短评分别位于<span class="title">、<span class="rating_num">和<span class="inq">标签中。
3. 编写爬虫代码

以下是完整的爬虫代码:
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import pandas as pd
  4. # 定义目标URL
  5. url = "https://movie.douban.com/top250"
  6. # 发送HTTP请求,获取网页内容
  7. headers = {
  8.     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
  9. }
  10. response = requests.get(url, headers=headers)
  11. # 解析网页内容
  12. soup = BeautifulSoup(response.text, "html.parser")
  13. # 提取电影信息
  14. movies = []
  15. for item in soup.find_all("div", class_="item"):
  16.     title = item.find("span", class_="title").text
  17.     rating = item.find("span", class_="rating_num").text
  18.     quote = item.find("span", class_="inq").text if item.find("span", class_="inq") else "无短评"
  19.     movies.append({"电影名称": title, "评分": rating, "短评": quote})
  20. # 将数据保存为CSV文件
  21. df = pd.DataFrame(movies)
  22. df.to_csv("douban_top250.csv", index=False, encoding="utf_8_sig")
  23. print("数据抓取完成,已保存为douban_top250.csv")
复制代码
4. 代码解析



  • 发送HTTP哀求:利用requests.get()方法获取网页内容,并通过headers模仿浏览器哀求,制止被网站反爬虫机制拦截。
  • 解析HTML:利用BeautifulSoup解析网页内容,并通过find_all()方法提取每部电影的信息。
  • 生存数据:利用pandas将提取的数据生存为CSV文件。
5. 运行结果

运行脚本后,程序会天生一个名为douban_top250.csv的文件,内容如下:
电影名称评分短评肖申克的救赎9.7盼望让人自由。霸王别姬9.6风华旷世。阿甘正传9.5一部美国近现代史。.........


五、进一步优化

为了让爬虫更加健壮和实用,我们可以添加以下功能:

  • 分页抓取:豆瓣电影Top250分为10页,我们需要抓取全部页面的数据。
  • 异常处理:增长对网络哀求失败、HTML解析错误的处理。
  • 反爬虫战略:通过设置随机延时、利用代理IP等方式制止被网站封禁。
优化后的代码如下:
  1. import requests
  2. from bs4 import BeautifulSoup
  3. import pandas as pd
  4. import time
  5. import random
  6. # 定义抓取函数
  7. def scrape_page(url):
  8.     headers = {
  9.         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
  10.     }
  11.     response = requests.get(url, headers=headers)
  12.     if response.status_code != 200:
  13.         print(f"请求失败,状态码:{response.status_code}")
  14.         return []
  15.     soup = BeautifulSoup(response.text, "html.parser")
  16.     movies = []
  17.     for item in soup.find_all("div", class_="item"):
  18.         title = item.find("span", class_="title").text
  19.         rating = item.find("span", class_="rating_num").text
  20.         quote = item.find("span", class_="inq").text if item.find("span", class_="inq") else "无短评"
  21.         movies.append({"电影名称": title, "评分": rating, "短评": quote})
  22.     return movies
  23. # 抓取所有页面
  24. all_movies = []
  25. for page in range(0, 250, 25):
  26.     url = f"https://movie.douban.com/top250?start={page}"
  27.     print(f"正在抓取:{url}")
  28.     movies = scrape_page(url)
  29.     all_movies.extend(movies)
  30.     time.sleep(random.randint(1, 3))  # 随机延时,避免被封禁
  31. # 保存数据
  32. df = pd.DataFrame(all_movies)
  33. df.to_csv("douban_top250_full.csv", index=False, encoding="utf_8_sig")
  34. print("数据抓取完成,已保存为douban_top250_full.csv")
复制代码


六、总结

        通过本文的实战案例,我们学习了怎样利用Python构建一个简单的Web爬虫,并抓取了豆瓣电影Top250的数据。Web爬虫技术不仅可以用于数据采集,还能应用于数据分析、机器学习等范畴。盼望这篇文章能帮助你把握爬虫的基本原理,并激发你进一步探索的爱好。
        假如你对Web爬虫有更多想法或题目,接待在评论区留言讨论!也接待关注我的博客,获取更多技术干货。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表