- 一、网络爬虫是什么?
- 二、使用步骤
- 1.引入库
- 2.数据请求
- 2.数据解析
- 3.数据存储
- 4.完整代码
百度百科给出的定义:网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
本文以爬取诗词名句网的<<水浒传>>为例
二、使用步骤 1.引入库requests是python中一款基于网络请求的模块,功能非常强大,简单便捷,,效率极高,作用是模拟浏览器请求。
requests爬虫过程:
1.指定url
2.发起请求
3.获得响应数据
4.数据解析
5.持久化存储
Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能,作用是解析数据。
库的安装:
pip install requests
pip install bs4
代码如下(示例):
import requests from bs4 import BeautifulSoup2.数据请求
首先在浏览器进入此网址,右键检查或者快捷键F12,找到网络,即network,博主的谷歌浏览器都汉化了,F5,即出现此页面。
请求网址即需要爬取的网址,请求方法是get,所有之后用的是requests.get请求,状态码是200说明网页正常,滚到底可以看到user-agent,不同电脑不同,所有不能盲目复制。
代码如下(示例):
#诗词名句网
url = 'https://www.shicimingju.com/book/shuihuzhuan.html'
#U-A伪装
headers ={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
#请求响应
response = requests.get(url=url,headers=headers)
response.encoding='utf-8'#确保中文不乱码
requests.get或者requests.post都不是偶然的,得去网页获取。
参数headers也不可或缺,这是模拟浏览器访问,否则会被打掉。
soup = BeautifulSoup(XXX.text,“lxml”)
注意:必须是text形式。
lxml是Python自带的解析器,功能强大。
#数据解析
soup = BeautifulSoup(response.text,'lxml')
#找到所有章节
li_list = soup.select(".book-mulu > ul > li")#select返回的是列表
select选择器返回的是一个列表,这里就找到了水浒传的全部章节了。
for li in li_list:
#章节名
title = li.a.text
#章节网址
chapter_url = 'https://www.shicimingju.com'+str(li.a['href'])
#
#headers共用
#请求响应
chapter_response = requests.get(url=chapter_url,headers=headers)
chapter_response.encoding='utf-8'
#数据解析
charpter_soup = BeautifulSoup(chapter_response.text,'lxml')
content = charpter_soup.find('div',class_='chapter_content').text
观察可知,a标签的href属性即是每章节的网址,不过是绝对网址,所以这样写:
chapter_url = ‘https://www.shicimingju.com’+str(li.a[‘href’])
然后内容同上,只不过是对章节网址进行请求和解析。
3.数据存储数据存储前,我们要确保无误,先输出一下。
运行完后,文件夹会出现水浒传.txt,爬取成功,结束!
import requests
from bs4 import BeautifulSoup
#诗词名句网
url = 'https://www.shicimingju.com/book/shuihuzhuan.html'
#U-A伪装
headers ={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
#请求响应
response = requests.get(url=url,headers=headers)
response.encoding='utf-8'
#数据解析
soup = BeautifulSoup(response.text,'lxml')
#找到所有章节
li_list = soup.select(".book-mulu > ul > li")#select返回的是列表
fp = open("book/水浒传.txt","w",encoding='utf-8')#fp之所以放这,是for循环每次只找到一章
for li in li_list:
#章节名
title = li.a.text
#章节网址
chapter_url = 'https://www.shicimingju.com'+str(li.a['href'])
#headers共用
#请求响应
chapter_response = requests.get(url=chapter_url,headers=headers)
chapter_response.encoding='utf-8'
#数据解析
charpter_soup = BeautifulSoup(chapter_response.text,'lxml')
content = charpter_soup.find('div',class_='chapter_content').text
#print(title+' 爬取完毕!')
print(title+"n"+content)
fp.write(title+content)#将章节名和内容写入txt



