7.爬虫基本原理

上一篇:6.Python爬虫常用库的安装
下一篇:8.Urllib库基本使用

一、什么是爬虫

   简单理解为:请求网站并提取数据的自动化程序
   请求:浏览器请求服务器获取网络资源,HTML文本
   提取:从HTML文本中提取需要的信息(手机号等)存入数据库
   自动化:程序可以不停循环爬取信息

二、工作原理(示例)

   打开百度新闻,浏览器检查(右击一般会有)
   Elements就是网页源代码,要提取的信息就在这里面。

三、基本流程

  1. 发起请求。通过HTTP库向目标站点发起请求,即发送一个Request。请求可以包含额外的headers等信息,等待服务器响应。
  2. 获取响应内容。如果服务器正常响应,会得到一个Response,Response的内容就是所要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(图片视频)等类型。
  3. 解析网页内容。得到的内容可能是:HTML--可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以保存或者进一步处理。
  4. 保存数据。保存形式多样,可以保存为文本,也可以保存至数据库,或者保持特定格式(图片等)的文件。
Request和Response
  1. 浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
  2. 服务器收到浏览器发送的信息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response.
  3. 浏览器接收到服务器的Response信息后,会对信息进行相应处理,然后展示。
  • Request:
  1. 请求方式,主要是GET、POST两种。
    1.1 GET:请求参数直接显示,不安全。输入url可以直接访问。
    1.2 POST:多了Form Data,更安全,链接没有参数,在Form Data中。
  2. 请求URL:URL全称 统一资源定位符,如一个文档、一张图片、一个视频等都可以用URL(链接)唯一来确定。
  3. 请求头:Headers--包含请求时的头部信息,如User-Agent、Host、Cookies等信息。浏览器识别,决定是否给你发送响应。
  4. 请求体:请求时,额外携带的数据,如表单提交时的表单数据。(post才有)
  • Response:
  1. 响应状态---Status Code:
    1.1 200:成功。
    1.2 301:跳转。
    1.3 404:找不到页面。
    1.4.502:服务器处理错误。
  2. 响应头,如内容类型,内容长度,服务器信息,设置Cookie等
  3. 响应体(form-data):最重要的部分,包含了请求资源的内容,如网页HTML,图片,二进制数据等。
    示例:
import requests

#示例
response = requests.get("http://www.baidu.com")
print(response.text)            #网页源代码
print(response.status_code)     #响应码 200
print(response.headers)         #是键值对模式
  • 爬虫抓取怎样的数据
    1.网页文本:HTML文档,Json格式文本等
    2.图片:抓取到的是二进制文件,保存为图片格式
import requests

# 抓取一个图片
response = requests.get("http://e.hiphotos.baidu.com/image/h%3D300/sign=25b08adadd1373f0ea3f699f940e4b8b/0bd162d9f2d3572ce52c8e7d8613632763d0c341.jpg")
print(response.content)         #输出二进制
# 文件写入---执行完毕后,在同级目录会下载改图片
with open("D:\\1.jpg","wb") as f:
    f.write(response.content)
    f.close()
  1. 视频同图片,还有其他能请求到的都可以
  • 解析方式
  1. 直接处理,字符串简单去除首尾的空格
  2. Json,网站通过ajax加载的,返回的是Json格式的字符串,解析成字符串对象
  3. 正则表达式
  4. BeautifulSoup
  5. PyQuery
  6. XPath
有时候看到的内容和抓取的代码不一致

是因为JavaScript渲染的问题

怎样解决JavaScript渲染的问题?

1、分析Ajax请求
2、Seleinum/WebDriver(自动化测试)

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://taobao.com")
print(driver.page_source)       #不用担心js渲染的问题

3、Splash
4、PyV8、Ghost.py

怎样保存数据

1、文本:纯文本、Json、Xml等。
2、关系型数据库:MySql、Oracle、Sqlserver等具有结构化表结构形式存储。
3、非关系型数据库:如MongoDB、Redis字典型键值对形式存储。
4、二进制文件:如图片、视频、音频等直接保存特定格式即可。

上一篇:6.Python爬虫常用库的安装
下一篇:8.Urllib库基本使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,862评论 1 3
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,298评论 6 428
  • 给你拌一碗饭,多放几块鱼,鱼汤少些 给你倒一晚水,温的,比井水好多了 看着你慢慢向我走来,放下警惕的目光 心中不自...
    么么哒12138阅读 133评论 0 0
  • 想象中的大金湖,站在岸边,举目远眺,一望无际的湖面,艄公缓缓地摇着橹.... 宣传中的大金湖,丹霞地貌与浩瀚的湖水...
    久儿久知阅读 204评论 0 0
  • 最近参与了几个项目,积累了一些经(xue)验(lei),有的项目失败了,有的项目完成得质量不高,所以做个总结,也算...
    mouse33333阅读 464评论 3 3