Python爬虫入门实例:Python7个爬虫小案例(附源码)

前言

随着互联网的快速发展,数据成为了新时代的石油。Python作为一种高效、易学的编程语言,在数据采集领域有着广泛的应用。本文将详细讲解Python爬虫的原理、常用库以及实战案例,帮助读者掌握爬虫技能。

一、爬虫原理

爬虫,又称网络爬虫,是一种自动获取网页内容的程序。它模拟人类浏览网页的行为,发送HTTP请求,获取网页源代码,再通过解析、提取等技术手段,获取所需数据。

1. HTTP请求与响应过程

爬虫首先向目标网站发送HTTP请求,请求可以包含多种参数,如URL、请求方法(GET或POST)、请求头(Headers)等。服务器接收到请求后,返回相应的HTTP响应,包括状态码、响应头和响应体(网页内容)。

2. 常用爬虫技术

  • **请求库:**如requests、aiohttp等,用于发送HTTP请求。
  • **解析库:**如BeautifulSoup、lxml、PyQuery等,用于解析网页内容。
  • **存储库:**如pandas、SQLite等,用于存储爬取到的数据。
  • **异步库:**如asyncio、aiohttp等,用于实现异步爬虫,提高爬取效率。

二、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文件中。

import requestsfrom bs4 import BeautifulSoupimport csv# 请求URLurl = '<https://movie.douban.com/top250>'# 请求头部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() writer.writerow([title, rating_num, comment_num])# 保存数据函数def save_data(): f = open('douban_movie_top250.csv', 'a', newline='', encoding='utf-8-sig') global writer writer = csv.writer(f) writer.writerow(['电影名称', '评分', '评价人数']) for i in range(10): url = '<https://movie.douban.com/top250?start=>' + str(i*25) + '&filter=' response = requests.get(url, headers=headers) parse_html(response.text) f.close()if __name__ == '__main__': save_data()

2. 爬取猫眼电影Top100

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

import requestsimport re# 请求URLurl = '<https://maoyan.com/board/4>'# 请求头部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): 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) items = re.findall(pattern, html) for item in items: yield { '电影名称': item[1], '主演': item[2].strip(), '上映时间': item[3] }# 保存数据函数def save_data(): f = open('maoyan_top100.txt', 'w', encoding='utf-8') for i in range(10): url = '<https://maoyan.com/board/4?offset=>' + str(i*10) response = requests.get(url, headers=headers) for item in parse_html(response.text): f.write(str(item) + '\\\\n') f.close()if __name__ == '__main__': save_data()

3. 爬取全国高校名单

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

import requestsimport re# 请求URLurl = '<http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html>'# 请求头部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): 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) items = re.findall(pattern, html) for item in items: yield { '排名': item[0], '学校名称': item[2], '省市': item[3], '总分': item[4] }# 保存数据函数def save_data(): f = open('university_top100.txt', 'w', encoding='utf-8') response = requests.get(url, headers=headers) for item in parse_html(response.text): f.write(str(item) + '\\\\n') f.close()if __name__ == '__main__': save_data()

4. 爬取中国天气网城市天气

这个案例使用xpath和requests库爬取中国天气网的城市天气,并将这些信息保存到CSV文件中。

import requestsfrom lxml import etreeimport csv# 请求URLurl = '<http://www.weather.com.cn/weather1d/101010100.shtml>'# 请求头部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): selector = etree.HTML(html) city = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/h1/text()')[0] temperature = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/i/text()')[0] weather = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/@title')[0] wind = selector.xpath('//*[@id="around"]/div/div[1]/div[1]/p/span/text()')[0] return city, temperature, weather, wind# 保存数据函数def save_data(): f = open('beijing_weather.csv', 'w', newline='', encoding='utf-8-sig') writer = csv.writer(f) writer.writerow(['城市', '温度', '天气', '风力']) for i in range(10): response = requests.get(url, headers=headers) city, temperature, weather, wind = parse_html(response.text) writer.writerow([city, temperature, weather, wind]) f.close()if __name__ == '__main__': save_data()

5. 爬取当当网图书信息

这个案例使用xpath和requests库爬取当当网图书信息,并将这些信息保存到CSV文件中。

import requestsfrom lxml import etreeimport csv# 请求URLurl = '<http://search.dangdang.com/?key=Python&act=input>'# 请求头部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): selector = etree.HTML(html) book_list = selector.xpath('//*[@id="search_nature_rg"]/ul/li') for book in book_list: title = book.xpath('a/@title')[0] link = book.xpath('a/@href')[0] price = book.xpath('p[@class="price"]/span[@class="search_now_price"]/text()')[0] author = book.xpath('p[@class="search_book_author"]/span[1]/a/@title')[0] publish_date = book.xpath('p[@class="search_book_author"]/span[2]/text()')[0] publisher = book.xpath('p[@class="search_book_author"]/span[3]/a/@title')[0] yield { '书名': title, '链接': link, '价格': price, '作者': author, '出版日期': publish_date, '出版社': publisher }# 保存数据函数def save_data(): f = open('dangdang_books.csv', 'w', newline='', encoding='utf-8-sig') writer = csv.writer(f) writer.writerow(['书名', '链接', '价格', '作者', '出版日期', '出版社']) response = requests.get(url, headers=headers) for item in parse_html(response.text): writer.writerow(item.values()) f.close()if __name__ == '__main__': save_data()

6. 爬取糗事百科段子

这个案例使用xpath和requests库爬取糗事百科的段子,并将这些信息保存到TXT文件中。

import requestsfrom lxml import etree# 请求URLurl = '<https://www.qiushibaike.com/text/>'# 请求头部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): selector = etree.HTML(html) content_list = selector.xpath('//div[@class="content"]/span/text()') for content in content_list: yield content# 保存数据函数def save_data(): f = open('qiushibaike_jokes.txt', 'w', encoding='utf-8') for i in range(3): url = '<https://www.qiushibaike.com/text/page/>' + str(i+1) + '/' response = requests.get(url, headers=headers) for content in parse_html(response.text): f.write(content + '\\\\n') f.close()if __name__ == '__main__': save_data()

7. 爬取新浪微博

这个案例使用selenium和requests库爬取新浪微博,并将这些信息保存到TXT文件中。

import timefrom selenium import webdriverimport requests# 请求URLurl = '<https://weibo.com/>'# 请求头部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): print(html)# 保存数据函数def save_data(): f = open('weibo.txt', 'w', encoding='utf-8') browser = webdriver.Chrome() browser.get(url) time.sleep(10) browser.find_element_by_name('username').send_keys('username') browser.find_element_by_name('password').send_keys('password') browser.find_element_by_class_name('W_btn_a').click() time.sleep(10) response = requests.get(url, headers=headers, cookies=browser.get_cookies()) parse_html(response.text) browser.close() f.close()if __name__ == '__main__': save_data()

希望这7个小案例能够帮助大家更好地掌握Python爬虫的基础知识!

三、爬虫注意事项与技巧

  • 遵循Robots协议

  • 尊重网站的爬虫协议,避免爬取禁止爬取的内容。

  • 设置合理的请求间隔

  • 避免对目标网站服务器造成过大压力,合理设置请求间隔。

  • 处理反爬虫策略

  • 了解并应对网站的反爬虫策略,如IP封禁、验证码等。

  • 使用代理IP、Cookies等技巧

  • 提高爬虫的稳定性和成功率。

  • 分布式爬虫的搭建与优化

  • 使用Scrapy-Redis等框架,实现分布式爬虫,提高爬取效率。

Python爬虫框架

  • Scrapy:强大的Python爬虫框架,支持分布式爬取、多种数据格式、强大的插件系统等。

  • Scrapy-Redis:基于Scrapy和Redis的分布式爬虫框架,实现分布式爬取和去重功能。

总结:

通过本文的讲解,相信读者已经对Python爬虫有了较为全面的认识。爬虫技能在数据分析、自然语言处理等领域具有广泛的应用,希望读者能够动手实践,不断提高自己的技能水平。同时,请注意合法合规地进行爬虫,遵守相关法律法规。

零基础小白如何入门学习Python?

关于Python技术储备:

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

学习Python最重要的就是实践,在实践中每解决一个问题,那技能水平就提升一大截。除了上面的学习网站,学习python肯定不只是靠这个,一味的看知识点都是低效率的,结合视频和实践一起精通python不是难事,接下来分享一下我学习八年总结的学习经验:

1.Python学习路线图


首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!

2.Python必备开发工具

Python+Pycharm工具安装可移步看我这篇文章:Python安装教程(2024最新)-CSDN博客

3.看视频进行系统学习

先在网上康康达人分享的视频、干货,通俗易懂,形成初始概念;你会发现博主们在进阶成大神之前他们的学习途径有哪些,找到适合自己风格的课程;

不过这样学习技术比较杂乱,所以通过更加系统的视频来学习,效果更好,也更全面。

4.实战案例


光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

最后


如果你也想自学Python,可以关注我。我会把踩过的坑分享给你,让你不要踩坑,提高学习速度,还整理出了一套系统的学习路线,这套资料涵盖了诸多学习内容:开发工具,基础视频教程,项目实战源码,51本电子书籍,100道练习题等。相信可以帮助大家在最短的时间内,能达到事半功倍效果,用来复习也是非常不错的。

资料获取:已打包,添加文末 Python笔记领取 CSDN官方合作vx即可获取!

希望这篇文章对你有帮助,也希望能帮到大家,因为你我都是热爱python的编程语言爱好者。

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值