目录
一、爬取豆瓣电影Top250信息:
二、爬取Github上的Python项目信息(只有一部分)
三、爬取知乎上关于Python话题下的热门问题和对应的回答:
总结
嘿嘿,小伙伴们,今天为了激发大家的学习兴趣。俺特的找了几个爬虫的小案例,给大家展示一下。话不多说,正片开始。(大家在爬取数据的时候,一定要注意合法合规)
一、爬取豆瓣电影Top250信息:
就是这个豆瓣电影页面,接下来我们就要把前250名的电影的电影名称与评分爬取下来保存到
douban_top250.csv文件中
豆瓣网站的反爬虫机制限制了请求的频率或者数据量。所以我们可以尝试在每次请求之间加入更长的延迟,以降低请求频率。另外,我们也可以尝试分批次进行请求,每次请求部分数据,然后合并结果。以下是一个分批次请求的示例代码:
import requests
from bs4 import BeautifulSoup
import csv
import time
import random
def scrape_douban_top250(url):
# 设置请求头
headers = {
'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'
}
# 发起请求
response = requests.get(url, headers=headers)
# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
# 获取电影列表
movies = soup.find_all('div', class_='item')
return movies
def save_to_csv(movies, filename):
# 将电影信息保存到CSV文件中
with open(filename, 'a', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile)
for movie in movies:
title = movie.find('span', class_='title').get_text()
rating = movie.find('span', class_='rating_num').get_text()
csvwriter.writerow([title, rating])
url = '<https://movie.douban.com/top250>'
filename = 'douban_top250.csv'
# 创建CSV文件并写入表头
with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['电影名称', '评分'])
start = 0
while start < 250:
# 循环爬取每页的电影信息
movies = scrape_douban_top250(f'{url}?start={start}')
save_to_csv(movies, filename)
start += 25
# 添加随机延迟,避免频繁请求被封禁
time.sleep(random.uniform(1, 3))
print('保存成功')
添加请求头信息: 有些网站需要在请求中包含用户代理(User-Agent)信息,模拟浏览器访问。你可以尝试添加请求头信息来解决问题:
headers = {
'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'
}
response = requests.get(url, headers=headers)
结果展示:
二、爬取Github上的Python项目信息(只有一部分)
import requests
import csv
def get_python_projects():
# 设置请求URL和参数
url = '<https://api.github.com/search/repositories>'
params = {
'q': 'language:python',
'sort': 'stars',
'order': 'desc'
}
# 设置请求头,包括用户代理信息
headers = {
'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'
}
# 发起GET请求
response = requests.get(url, params=params, headers=headers)
# 解析JSON响应
data = response.json()
projects = data['items']
return projects
if __name__ == '__main__':
# 获取项目信息
projects = get_python_projects()
# 写入CSV文件
with open('github_python_projects.csv', 'w', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile)
# 写入表头
csvwriter.writerow(['项目名称', '星标数', '项目地址'])
# 遍历项目列表,写入每个项目的信息
for project in projects:
name = project['name']
stars = project['stargazers_count']
url = project['html_url']
csvwriter.writerow([name, stars, url])
print('保存成功')
请确保替换代码中的 'Your User Agent'
为合适的用户代理信息。这段代码会将项目名称、星标数和项目地址保存到名为**github_python_projects.csv
**的CSV文件中,并在控制台输出“保存成功”消息。
结果展示:
三、爬取知乎上关于Python话题下的热门问题和对应的回答:
import requests
from bs4 import BeautifulSoup
import csv
import textwrap
url = '<https://www.zhihu.com/topic/19552832/top-answers>'
headers = {
'User-Agent': 'Your User Agent' # 替换为你的用户代理
}
# 发送请求获取页面内容
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 解析页面获取问题和回答
questions = soup.select('.List-item')
data = []
for question in questions:
title = question.select_one('.ContentItem-title').get_text()
answer = question.select_one('.RichContent-inner').get_text()
# 格式化回答文本,限制每行最大长度为80
answer = '\\n'.join(textwrap.wrap(answer, width=80))
data.append({'问题': title, '回答': answer})
# 将结果保存到CSV文件中
with open('zhihu_python.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['问题', '回答']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for qa in data:
writer.writerow(qa)
print('保存成功')
这段代码首先发送请求获取知乎Python话题下热门问题和回答的页面内容,然后使用BeautifulSoup解析页面,提取问题和回答信息。接着,使用textwrap模块对回答文本进行格式化,限制每行最大长度为80个字符。最后,将格式化后的结果保存到CSV文件中。
结果展示:
总结
当涉及Python爬虫学习时,案例对于激发兴趣和加深理解非常重要。在这个过程中,我们学习了如何使用Python中的requests和BeautifulSoup库来进行简单和复杂的网页数据抓取。
在这个过程中,我们从简单的示例开始,比如爬取百度首页的标题和链接,逐渐过渡到复杂的案例,比如爬取豆瓣电影Top250的详细信息和知乎上关于Python话题下的热门问题和回答。通过这些案例,我们学会了如何处理不同类型的网页内容,如何解析HTML,以及如何提取和保存感兴趣的数据。
在实际项目中,爬虫可以应用于许多领域,如数据采集、信息监控、搜索引擎优化等。掌握爬虫技术可以帮助我们更好地理解网络数据的结构和组织方式,并能够从中获取有用的信息。
总的来说,通过学习Python爬虫,我们不仅可以提升数据获取和处理的能力,还可以培养数据分析和挖掘的兴趣,为进一步深入学习和实践打下坚实的基础。
小伙伴们·,今天的展示就到这里了,希望可以在一定程度上可以激发你们学习的兴趣。温馨提示,不要乱爬取网站的敏感数据,一定要合法合规。