初学者对爬虫的一些基本的理解
前期准备工作
1.加入社区 https://bbs.csdn.net/forums/dc46af229e1f4af39b3374c243f85054?joinKey=xenm0vl6l0wl-mz6v9owl0x-1-0c68a3a9261672c2c93b49a0c620f915
2.写博客:
投稿地址 : https://bbs.csdn.net/forums/dc46af229e1f4af39b3374c243f85054?joinKey=xenm0vl6l0wl-mz6v9owl0x-1-0c68a3a9261672c2c93b49a0c620f915选择立即创作或立即投稿,注意格式,写好之后,发布文章。
3.在投稿列表中,查看是否发布成功
4.进入到社区提交:https://bbs.csdn.net/topics/608732920 在留言中填写 “我要报名”,然后提交即可
爬虫的概念
基本概念
爬虫又被称为网页蜘蛛、网络机器人,有时也被称为网页追逐者,是一种按照一定的规则,自动地抓取互联网上网页中相应信息(文本、图片等)的程序或脚本,然后把抓取的信息存储到自己的计算机上。简单来说,爬虫就是抓取目标网站内容的工具,一般是根据定义的行为自动进行抓取,更智能的爬虫会自动分析目标网站结构,类似于搜索引擎的爬虫。
爬虫的基本流程
网络爬虫爬取数据的流程与人工通过搜索引擎获取信息的流程基本一致。如下:
1.发起请求:
通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers、data等信息,然后等待服务器响应。这个请求的过程就像我们打开浏览器,在浏览器地址栏输入网址:www.baidu.com,然后点击回车。这个过程其实就相当于浏览器作为一个浏览的客户端,向服务器端发送了 一次请求。
2.获取响应内容:
如果服务器能正常响应,我们会得到一个Response,Response的内容便是所要获取的内容,类型可能有HTML、Json字符串,二进制数据(图片,视频等)等类型。这个过程就是服务器接收客户端的请求,进过解析发送给浏览器的网页HTML文件。
3.解析内容:
得到的内容可能是HTML,可以使用正则表达式,网页解析库进行解析。也可能是Json,可以直接转为Json对象解析。可能是二进制数据,可以做保存或者进一步处理。这一步相当于浏览器把服务器端的文件获取到本地,再进行解释并且展现出来。
4.保存数据:
保存的方式可以是把数据存为文本,也可以把数据保存到数据库,或者保存为特定的jpg,mp4 等格式的文件。这就相当于我们在浏览网页时,下载了网页上的图片或者视频。
HTML解析
Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个 Python 第三方库,它可以从 HTML 或 XML 文档中快速地提取指定的数据。
首先,我们需要安装BS4
pip install beautifulsoup4==4.11.1 -i https://pypi.tuna.tsinghua.edu.cn/simple。
接着安装lxml解析库来进行文档的解析
pip install lxml
示例:
1.读取HTML文档
# 第一步 导入依赖库
from bs4 import BeautifulSoup#coding:utf8
html_doc = """
<html><head><title>"bs4测试"</title></head>
<body>
<div><span class="cla01">标签文本</span>div中文本<!--注释代码--></div>
"""# 第二步,加载数据为BeautifulSoup对象:
soup = BeautifulSoup(html_doc, 'html.parser')
#prettify()用于格式化输出html/xml文档
print(soup.prettify())# 第三步,获取文档中各个元素:
# 利用soup.find('div')获取div标签
tag_node = soup.find('div')
print(type(tag_node),'\t:',tag_node)# 遍历div标签对象,获取其中的各个对象
for item in tag_node:print(type(item),'\t:',item)
'html_doc'是为要解析的html文档,'html.parser'为解析方法,也可为'lxml'
输出结果为:
<html><head><title>"bs4测试"</title></head><body><div><span class="cla01">标签文本</span>div中文本<!--注释代码--></div></body>
</html>
<class 'bs4.element.Tag'> : <div><span class="cla01">标签文本</span>div中文本<!--注释代码--></div>
<class 'bs4.element.Tag'> : <span class="cla01">标签文本</span>
<class 'bs4.element.NavigableString'> : div中文本
<class 'bs4.element.Comment'> : 注释代码
2.爬取三国演义小说的所有章节和内容
import requests
from bs4 import BeautifulSoup
#需求:爬取三国演义小说的所有章节和内容
if __name__ == '__main__':#UA伪装:将对应的User-Agent封装到一个字典中headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}#对首页的页面进行爬取url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
# page_text = requests.get(url=url,headers=headers).textpage_text = requests.get(url=url,headers=headers).content#在首页中解析出章节的标题和详情页的url#1、实例化BeautifulSoup对象,需要将页面源码数据加载到该对象中soup = BeautifulSoup(page_text,'html.parser')#解析章节标题和详情页的urlli_list = soup.select('.book-mulu > ul > li')fp = open('./sanguo.txt','w',encoding='utf-8')num = 0for li in li_list:num += 1if num >5:breaktitle = li.a.string#详情页面的urldetail_url = 'http://www.shicimingju.com'+li.a['href']#对详情页发起请求,解析出章节内容detail_page_text = requests.get(url=detail_url,headers=headers).content#解析出相关章节内容detail_soup = BeautifulSoup(detail_page_text,'html.parser')div_tag = detail_soup.find('div',class_='chapter_content')#解析到了章节的内容content = div_tag.textfp.write(title+':'+content+'\n')print(title,'successful!')
输出结果为:
第一回·宴桃园豪杰三结义 斩黄巾英雄首立功 successful!
第二回·张翼德怒鞭督邮 何国舅谋诛宦竖 successful!
第三回·议温明董卓叱丁原 馈金珠李肃说吕布 successful!
第四回·废汉帝陈留践位 谋董贼孟德献刀 successful!
第五回·发矫诏诸镇应曹公 破关兵三英战吕布 successful!
...
json文件
JSON 的值可以是如下类型:
- 字符串(在双引号中)
- 数字(整数或浮点数)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- Null
JSON 的数组用一对方括号[]表示,类似于list,数组元素用逗号隔开,元素值可以是任意 JSON 数据类型
JSON 的对象用一对大括号{}表示,类似于dict,对象可以拥有多个名称/值 对,名称/值 对用逗号隔开
解析json文件
采用loads方法进行解析
生成json文件
示例:将其按 JSON 格式解析后,将 infos 数组内的三个对象的年龄 age 增加一岁,然后增加一条记录:‘名称:叶良辰,年龄:17,身高:1.87,男性’,同时,将 count 的值从3改为4
XPath路径表达式
示例:
Urllib模块
Urlopen函数:
返回的结果不能直接使用,需通过read()方法读取后再对格式进行修改为utf-8的类型
html = response.read()
html = html.code(“utf-8”)
构造response对象
获取Cookie
初学者对爬虫的一些基本的理解相关推荐
- 《C语言编程初学者指南》一2.9 理解运算符优先级
本节书摘来自异步社区<C语言编程初学者指南>一书中的第2章,第2.9节,作者[美]Keith Davenport(达文波特) , M1ichael Vine(维恩),更多章节内容可以访问云 ...
- 区块链初学者指南——五岁孩子都能理解
如今,从理发师到在股市工作的朋友,人人都在谈论比特币.别担心,这篇文章不是那种讨论如何从比特币中赚钱的文章,我将努力帮助你理解比特币的基层技术,以及区块链在未来几十年里如何发挥作用. 历史回顾 200 ...
- Python网络爬虫理解
今天买了一本<玩转python网络爬虫>,打算深入学习网络爬虫~~ 刚开始就是基础理解啦~~~ 定义: 网络爬虫是一种按照一定的规则自动地抓取网络信息的程序或者脚本: 爬虫的类型: 通用网 ...
- 零基础小白想学Python爬虫,但是不理解原理?5分钟带你理顺思路
很多人私信我,说自己是0基础学习Python,但是学爬虫的时候不太理解这个原理,下面我来给大家分享一下我的对Python爬虫的原理. 首先我们要知道什么是Python爬虫? 我们可以把互联网看成是各种 ...
- 百度贴吧爬虫:理解网页的加载过程
最近在学习爬虫,就顺便记录一下吧(つд⊂) 以百度贴吧的主题帖为例子,首先,在百度贴吧主页那个大大的搜索框旁边,点那个小小的"高级搜索",输入关键词,以"王思聪" ...
- 谈谈你对爬虫和反爬虫的理解?
谈谈对爬虫和反爬的理解 A.爬虫 爬虫的定义: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.从功能上 ...
- 【Python基础】Python爬虫的两套解析方法和四种信息提取方式
Python爬虫 Author:Iouwill Machine Learning Lab 分享一篇往日旧文章,非常实用. 对于大多数朋友而言,爬虫绝对是学习python的最好的起手和入门方式.因为爬虫 ...
- ctf up怎么写 write_??零基础写网络爬虫的思路??
网络爬虫,用一句话简单总结,就是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本.写这篇文章的初衷是有个知友私信我说,模仿了很多网上用Python写爬虫的例子,但到了需要自己动手写爬虫的时候又不 ...
- 对于0基础来说,Python 中有哪些难以理解的概念?我似乎明白了
对于初学者,我们都遇到过难以理解一些概念.哪门都有哪些呢? 总结来说有:编码问题.装饰器.闭包.对象引用.可变性,抽象基类.魔术方法.多重继承.mixin.重载.可迭代对象.迭代器和生成器.上下文管理 ...
最新文章
- Linux那些事儿 之 戏说USB(33)字符串描述符
- docker容器网络 - 同一个host下的容器间通信
- 一条长度为l的笔直街道 java_如图,在一条笔直的东西向海岸线l上有一长为1.5km的码头MN和灯塔C,灯塔C距...
- 投影幕布尺寸计算器_如果把投影幕布安装在家里,有哪些安装位置和方式?
- idea +springMVC搭建项目,新建各种文件基础
- Oracle表空间创建的sql
- glyphicon halflings regular ttf 报错
- mybatis_SQL映射(1)
- C# 数据类型及相互转换及常用基础
- rabbitmq入门_Rabbit MQ 入门
- form-create教程:给内置组件和自定义组件添加事件
- 管家婆ERP A8 3.7版本sql Server2005数据库修复成功
- [转]第四章 使用OpenCV探测来至运动的结构——Chapter 4:Exploring Structure from Motion Using OpenCV...
- Office Open XML 文档格式(转)
- 简单说 通过CSS实现 文字渐变色 的两种方式
- 你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
- 需求与商业模式创新-需求2-需求基础
- 对于计算机学科的认识和一些感想
- oracle备份数据库的格式,ORACLE 数据库备份文件的后缀是()。
- “联通云”正式浮出水面 要讲出云计算怎样的“新故事”?
热门文章
- springboot 妙启动_优雅的启动、停止、重启你的SpringBoot项目
- Photoshop工具栏自学笔记
- 计算机在职研究生是学历教育吗,2019年报考计算机技术在职研究生毕业之后为什么还是本科学历呢...
- 让颜色更加饱满和有冲击力:图像颜色校正
- 远程桌面连接出现 CredSSP 加密Oracle修正 错误
- Windows Server2008R2 远程桌面提示credssp加密数据修正 无法远程
- Java时间戳:Instant
- java数组定义长度_JAVA数组的定义
- 搭建SFTP服务,并SSH和SFTP端口分离、用户权限控制
- 第15周-嵌入式Linux(树莓派)环境设置和交叉编译