赞
踩
网络爬虫是一种用于自动获取网页内容的程序。它模拟用户浏览网页的过程,通过发送HTTP请求获取网页的源代码,并利用解析和提取技术来获取所需的数据。
爬虫向目标网站发送HTTP请求,请求包含URL、请求方法(如GET或POST)、请求头(Headers)等。服务器接收到请求后,会返回HTTP响应,其中包含状态码、响应头和响应体(网页内容)。
requests
和aiohttp
,用于发送HTTP请求。BeautifulSoup
、lxml
和PyQuery
,用于解析网页内容。pandas
和SQLite
,用于存储爬取的数据。asyncio
和aiohttp
,用于实现异步爬虫,提高爬取效率。接下来,将通过7个Python爬虫的小案例,帮助大家更好地学习和理解Python爬虫的基础知识。以下是每个案例的简介和源代码:
这个案例使用BeautifulSoup
库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息,并将这些信息保存到CSV文件中。
- import requests
- from bs4 import BeautifulSoup
- import csv
-
- # 请求URL
- url = '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()
这个案例使用正则表达式和requests
库爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。
- import requests
- import re
-
- # 请求URL
- url = '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()
这个案例使用正则表达式和requests
库爬取全国高校名单,并将这些信息保存到TXT文件中。
- import requests
- import re
-
- # 请求URL
- url = '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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。