当前位置:   article > 正文

Python爬虫原理以及3个小案例(源码)

Python爬虫原理以及3个小案例(源码)

一、爬虫原理

网络爬虫是一种用于自动获取网页内容的程序。它模拟用户浏览网页的过程,通过发送HTTP请求获取网页的源代码,并利用解析和提取技术来获取所需的数据。

1. HTTP请求与响应过程

爬虫向目标网站发送HTTP请求,请求包含URL、请求方法(如GET或POST)、请求头(Headers)等。服务器接收到请求后,会返回HTTP响应,其中包含状态码、响应头和响应体(网页内容)。

2. 常用爬虫技术

  • 请求库:例如requestsaiohttp,用于发送HTTP请求。
  • 解析库:例如BeautifulSouplxmlPyQuery,用于解析网页内容。
  • 存储库:例如pandasSQLite,用于存储爬取的数据。
  • 异步库:例如asyncioaiohttp,用于实现异步爬虫,提高爬取效率。

二、Python爬虫常用库

1. 请求库

  • requests:一个简洁而强大的HTTP库,支持HTTP连接保持和连接池、SSL证书验证、Cookies等。
  • aiohttp:一个基于asyncio的异步HTTP库,适合高并发的爬虫场景。

2. 解析库

  • BeautifulSoup:一个用于解析HTML和XML的库,简单易用,支持多种解析器。
  • lxml:一个高效的XML和HTML解析库,支持XPath和CSS选择器。
  • PyQuery:一个Python版的jQuery,语法与jQuery类似,易于上手。

3. 存储库

  • pandas:一个强大的数据分析库,提供数据结构和数据分析工具,支持多种文件格式。
  • SQLite:一个轻量级的数据库,支持SQL查询,适用于小型爬虫项目。

接下来,将通过7个Python爬虫的小案例,帮助大家更好地学习和理解Python爬虫的基础知识。以下是每个案例的简介和源代码:

案例1:爬取豆瓣电影Top250

这个案例使用BeautifulSoup库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息,并将这些信息保存到CSV文件中。

  1. import requests
  2. from bs4 import BeautifulSoup
  3. import csv
  4. # 请求URL
  5. url = 'https://movie.douban.com/top250'
  6. # 请求头部
  7. headers = {
  8. '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'
  9. }
  10. # 解析页面函数
  11. def parse_html(html):
  12. soup = BeautifulSoup(html, 'lxml')
  13. movie_list = soup.find('ol', class_='grid_view').find_all('li')
  14. for movie in movie_list:
  15. title = movie.find('div', class_='hd').find('span', class_='title').get_text()
  16. rating_num = movie.find('div', class_='star').find('span', class_='rating_num').get_text()
  17. comment_num = movie.find('div', class_='star').find_all('span')[-1].get_text()
  18. writer.writerow([title, rating_num, comment_num])
  19. # 保存数据函数
  20. def save_data():
  21. f = open('douban_movie_top250.csv', 'a', newline='', encoding='utf-8-sig')
  22. global writer
  23. writer = csv.writer(f)
  24. writer.writerow(['电影名称', '评分', '评价人数'])
  25. for i in range(10):
  26. url = 'https://movie.douban.com/top250?start=' + str(i * 25) + '&filter='
  27. response = requests.get(url, headers=headers)
  28. parse_html(response.text)
  29. f.close()
  30. if __name__ == '__main__':
  31. save_data()

案例2:爬取猫眼电影Top100

这个案例使用正则表达式和requests库爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。

  1. import requests
  2. import re
  3. # 请求URL
  4. url = 'https://maoyan.com/board/4'
  5. # 请求头部
  6. headers = {
  7. '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'
  8. }
  9. # 解析页面函数
  10. def parse_html(html):
  11. pattern = re.compile('<p class="name"><a href=".*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:\\\\d+}">(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', re.S)
  12. items = re.findall(pattern, html)
  13. for item in items:
  14. yield {
  15. '电影名称': item[1],
  16. '主演': item[2].strip(),
  17. '上映时间': item[3]
  18. }
  19. # 保存数据函数
  20. def save_data():
  21. f = open('maoyan_top100.txt', 'w', encoding='utf-8')
  22. for i in range(10):
  23. url = 'https://maoyan.com/board/4?offset=' + str(i * 10)
  24. response = requests.get(url, headers=headers)
  25. for item in parse_html(response.text):
  26. f.write(str(item) + '\n')
  27. f.close()
  28. if __name__ == '__main__':
  29. save_data()

案例3:爬取全国高校名单

这个案例使用正则表达式和requests库爬取全国高校名单,并将这些信息保存到TXT文件中。

  1. import requests
  2. import re
  3. # 请求URL
  4. url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html'
  5. # 请求头部
  6. headers = {
  7. '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'
  8. }
  9. # 解析页面函数
  10. def parse_html(html):
  11. pattern = re.compile('<tr class="alt">.*?<td>(.*?)</td>.*?<td><div align="left">.*?<a href="(.*?)" target="_blank">(.*?)</a></div></td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?</tr>', re.S)
  12. items = re.findall(pattern, html)
  13. for item in items:
  14. yield {
  15. '排名': item[0],
  16. '学校名称': item[2],
  17. '省市': item[3],
  18. '总分': item[4]
  19. }
  20. # 保存数据函数
  21. def save_data():
  22. f = open('university_top100.txt', 'w', encoding='utf-8')
  23. response = requests.get(url, headers=headers)
  24. for item in parse_html(response.text):
  25. f.write(str(item) + '\n')
  26. f.close()
  27. if __name__ == '__main__':
  28. save_data()
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/811452
推荐阅读
相关标签
  

闽ICP备14008679号