Python爬虫(含cookie欺骗)

我对python也是自学不久,平常都是用C,有正在学习C语言的朋友,可以进Q群121811911下载软件资料和视频,我们一起进步。

所需工具准备

*安装fiddler

*安装beautifulsoup4


pip install beautifulsoup4 -i https://pypi.douban.com/simple

*python 中的requests(标准库)

beautifulsoup用于解析html文档

bs4可以用于方便地解析html, xml等结构化文档,对于http的爬虫,我们最常用的功能,是解析html文档。

如,对于以下素材:


<pre style="margin: 8px 0px; color: rgb(51, 51, 51); background-color: rgb(238, 255, 204);">html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""</pre>

经过构造:


soup = bs4.BeautifulSoup(html_doc, "html.parser")

之后,标签被转化为soup对象中的各个成员。

其次,有多种方法去定位或遍历标签及标签的属性。


#寻找所有a标签,并以list形式返回

In [10]: soup.find_all('a')

Out[10]:

[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,

 <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,

 <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

对于tag对象,有类似字典的方法拿其对应的属性:


In [11]: for tag in soup.find_all('a'):

    ...: print(tag['href'])

    ...:

http://example.com/elsie

http://example.com/lacie

http://example.com/tillie

对于每个标签,可以通过.text属性,拿到其文本:


In [12]: list_a_tags = soup.find_all('a')

In [13]: list_a_tags[0].text

以下例子,打印出所有class为story的p标签中的text内容:


In [21]: for tag in list_p_tags:

    ...: if tag['class'][0] == 'story':

    ...: print(tag.text)

    ...:

Once upon a time there were three little sisters; and their names were

Elsie,

Lacie and

Tillie;

and they lived at the bottom of a well.

...

python中的requests模块介绍

requests是python自带的标准库,使用它,可以很方便得获取和发送http包。


import bs4

import requests

import sys

def main():

    if len(sys.argv) != 2:

        print('''

        usage:

            word_lookup.py <word>

        ''')

    else:

        url = 'http://dict.cn/' + sys.argv[1]

        rsp = requests.get(url)

        soup = bs4.BeautifulSoup(rsp.text, 'html.parser')

        div_id_content = soup.find(id='content')

        list_strong = div_id_content.find_all('strong')

        for tag in list_strong:

            print(tag.text)

if __name__ == "__main__":

    main()

http中的get方式与post方式

get方式

get方式的请求,其客户端(浏览器)发送的数据,直接放在url的尾部,用户可见。

post方式

post方式的请求,其客户端数据,放在http包内部,普通用户不可见。

requests的作者,同时开发了一款用于测试的服务器,称为httpbin,会响应各种http请求并回复。可以使用www.httpbin.org,也可以参考https://hub.docker.com/r/kennethreitz/httpbin/本地化安装。

使用fiddler进行抓包及http协议分析

每一个session(一个http包),都包含了一个request,和一个response,他们由都分为了两部分:headers, data。

fiddler分析的协议过程,就是查看客户端(浏览器)与服务端到底是如何通信发包的。

爬虫一般要尽量完美地模拟真实的浏览器发包过程。

cookie

cookie是为了网站(服务端)可以跨页面记录用户信息发明的一种机制。

它使得服务端有权限,在客户端创建记录信息的小文件(cookies),而客户端在与服务端通信的过程中,会将这些cookies的内容,一并读取并发给对应网站。

这种机制,使得服务端可以跨页面记录用户的信息。

request库中已经提供了可以长期保持状态的链接方式:


my_session = requests.session() #拿到session对象

my_session.post(url, header_dict, data_dict) #同普通的post或get方法

#不同之处在于, session的记录有连续性(自动保存了cookie等)

当要爬取有身份验证(需要登陆)的网站的信息时,一般有两个大方向:

其一,通过分析http协议,完整模拟出发包登陆的过程。

第二,先手工登陆,再通过复制cookie,用于之后的session中,模拟登陆状态下的抓取。

我对python也是自学不久,平常都是用C,有正在学习C语言的朋友,可以进Q群121811911下载软件资料和视频,我们一起进步。

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

推荐阅读更多精彩内容

  • 目录: Python网络爬虫(一)- 入门基础Python网络爬虫(二)- urllib爬虫案例Python网络爬...
    一只写程序的猿阅读 12,811评论 17 68
  • 基础知识 HTTP协议 我们浏览网页的浏览器和手机应用客户端与服务器通信几乎都是基于HTTP协议,而爬虫可以看作是...
    腩啵兔子阅读 1,462评论 0 17
  • 上网原理 1、爬虫概念 爬虫是什麽? 蜘蛛,蛆,代码中,就是写了一段代码,代码的功能从互联网中提取数据 互联网: ...
    riverstation阅读 8,026评论 1 2
  • Requests快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引。其假设你已经安装了...
    小娟_bb93阅读 1,460评论 0 3
  • 【原文】(6.27) 子曰:“君子博学于文,约之以礼,亦可以弗畔矣夫。” 【通译】 孔子说:“...
    钱江潮369阅读 542评论 0 2