1 环境
Windows7 x64
Python 3.7
2 流程
i) 导入库
ii)爬取网页源代码信息;
iii)爬取特定格式信息并保存为txt文档;
iv)爬取过程及代码的一些限定条件。
3 代码
3.1 配置相关库(requests和BS4)
输入
import requests
from bs4 import BeautifulSoup
输出
导入爬虫相关库
3.2 爬取网页源代码
输入
def download_page(url): # 用于下载页面
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
r = requests.get(url, headers=headers)
return r.text
输出
初始化必要参数,完成基础设置
备注:
声明函数(def)那一行的上方必须有两行的空行(PEP8:python编码规范)
3.3 爬取特定信息并保存
输入
def get_content(html, page):
output = """第{}页 作者:{} 性别:{} 年龄:{} 点赞:{} 评论:{}\n{}\n------------\n"""
soup = BeautifulSoup(html, 'html.parser')
con = soup.find(id='content-left')
con_list = con.find_all('div', class_="article")
for i in con_list:
author = i.find('h2').string # 获取作者名字
content = i.find('div', class_='content').find('span').get_text() # 获取内容
stats = i.find('div', class_='stats')
vote = stats.find('span', class_='stats-vote').find('i', class_='number').string # 获取点赞数
comment = stats.find('span', class_='stats-comments').find('i', class_='number').string # 获取评论数
author_info = i.find('div', class_='articleGender') # 获取作者 年龄,性别
if author_info is not None: # 非匿名用户
class_list = author_info['class']
if "womenIcon" in class_list:
gender = '女'
elif "manIcon" in class_list:
gender = '男'
else:
gender = ''
age = author_info.string # 获取年龄
else: # 匿名用户
gender = ''
age = ''
save_txt(output.format(page, author, gender, age, vote, comment, content))
输出
从网页源代码中爬取:页码、作者信息(姓名、性别、年龄)、点赞数、评论数、文本内容
输入
def save_txt(*args):
for i in args:
with open('qiushibaike.txt', 'a', encoding='utf-8') as file:
file.write(i)
输出
将爬取信息保存为txt文档
3.4 限定条件
输入
def main():
for i in range(1, 11):
url = 'https://qiushibaike.com/text/page/{}'.format(i)
html = download_page(url)
get_content(html, i)
输出
限定爬取页码:1-10(含10)页
输入
if __name__ == '__main__':
main()
输出
当.py文件被直接运行时,代码块被运行;否则(当.py文件以模块形式被导入时),代码块不运行
4 全文
代码全文如下:
# -*- coding: utf-8 -*-
###############################################################################
# Crawler
# Author: Lenox
# Data:2019.03.22
# License: BSD 3.0
###############################################################################
# 配置相关库
import requests
from bs4 import BeautifulSoup
# 抓取网页信息,返回格式为*.text的文本
def download_page(url): # 用于下载页面
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
r = requests.get(url, headers=headers)
return r.text
# 爬取特定网页、页码下的特定格式信息
def get_content(html, page):
output = """第{}页 作者:{} 性别:{} 年龄:{} 点赞:{} 评论:{}\n{}\n------------\n"""
soup = BeautifulSoup(html, 'html.parser')
con = soup.find(id='content-left')
con_list = con.find_all('div', class_="article")
for i in con_list:
author = i.find('h2').string # 获取作者名字
content = i.find('div', class_='content').find('span').get_text() # 获取内容
stats = i.find('div', class_='stats')
vote = stats.find('span', class_='stats-vote').find('i', class_='number').string # 获取点赞数
comment = stats.find('span', class_='stats-comments').find('i', class_='number').string # 获取评论数
author_info = i.find('div', class_='articleGender') # 获取作者 年龄,性别
if author_info is not None: # 非匿名用户
class_list = author_info['class']
if "womenIcon" in class_list:
gender = '女'
elif "manIcon" in class_list:
gender = '男'
else:
gender = ''
age = author_info.string # 获取年龄
else: # 匿名用户
gender = ''
age = ''
save_txt(output.format(page, author, gender, age, vote, comment, content))
# 将爬取内容保存为txt文档
def save_txt(*args):
for i in args:
with open('qiushibaike.txt', 'a', encoding='utf-8') as file:
file.write(i)
# 限定爬取1-10(含10)页的内容。我们也可以用 Beautiful Soup找到页面底部有多少页。
def main():
for i in range(1, 11):
url = 'https://qiushibaike.com/text/page/{}'.format(i)
html = download_page(url)
get_content(html, i)
# 当.py文件被直接运行时,代码块被运行;否则(当.py文件以模块形式被导入时),代码块不运行
if __name__ == '__main__':
main()