抓取网页生成电子书(使用Cookie有两种方式,你知道吗?(组图))

优采云 发布时间: 2021-10-08 21:27

  抓取网页生成电子书(使用Cookie有两种方式,你知道吗?(组图))

  在实际情况下,网站的很多内容只有登录后才能看到,所以我们需要进行模拟登录,利用登录状态进行爬取。这里我们需要用到cookies。

  现在大多数 网站 使用 cookie 来跟踪用户的登录状态。一旦网站验证登录信息,登录信息将存储在浏览器的cookie中。网站会使用这个cookie作为认证的凭证,在浏览网站的页面时返回给服务器。

  由于 cookie 存储在本地,因此它们可以被篡改和伪造。让我们来看看 cookie 是什么样子的。

  打开网页调试工具,随意打开一个网页,在“网络”选项卡中,打开一个链接,在标题中:

  

  我们把它复制出来看看:

  __guid=137882464.208312339030071800.1455264073383.613;

__huid=10POq43DvPO3U0izV0xej4%2BFDIemVPybee0j1Z1xnJnpQ%3D;

__hsid=825c7462cc8195a5;

somultiswitch=1;

__seedSign=68;

count=1; sessionID=132730903.3074093016427610600.1483758834211.764;

piao34=1;

city_code=101280101;

customEng=1-7

  它由键值对组成。

  接下来我们以豆豆一书的详情页为例,讲解cookies的使用。

  See Do是一个电子书下载网站,我的Kindle上的大部分书都在这里找到。

  示例网址为:宇宙是猫的困梦-看豆-提供优质正版电子书导购服务

  一般情况下,未登录的用户是看不到下载链接的,比如:

  

  这本书的下载链接是隐藏的。

  头信息如下:

  

  我们来看看登录后的页面:

  

  下载链接已经显示出来了,我们来看一下header信息的Cookie部分

  

  显然它与之前处于未记录状态的 cookie 不同。

  接下来,我们按照上一章抓取腾讯新闻的方法,对示例网址()进行HTTP请求:

  # coding:utf-8

import requests

from bs4 import BeautifulSoup

url = 'https://kankandou.com/book/view/22353.html'

wbdata = requests.get(url).text

soup = BeautifulSoup(wbdata,'lxml')

print(soup)

  结果如下:

  

  我们找到了下载链接所在的“图书购物指南”一栏的HTML代码:

  书籍导购

去亚马逊购买《宇宙是猫咪酣睡的梦》

  就像我们在未登录状态下使用浏览器访问本网站时,只显示亚马逊的购买链接,没有电子格式的下载链接。

  我们尝试在登录后使用以下 cookie:

  有两种使用cookies的方法,

  1、在header中直接写cookie

  完整代码如下:

  # coding:utf-8

import requests

from bs4 import BeautifulSoup

cookie = '''cisession=19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60;CNZZDATA1000201968=1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031;Hm_lvt_f805f7762a9a237a0deac37015e9f6d9=1482722012,1483926313;Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9=1483926368'''

header = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36',

'Connection': 'keep-alive',

'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Cookie': cookie}

url = 'https://kankandou.com/book/view/22353.html'

wbdata = requests.get(url,headers=header).text

soup = BeautifulSoup(wbdata,'lxml')

print(soup)

  上面的代码将响应返回给page(),

  我们的搜索响应代码,

  

  红色椭圆部分与无cookie访问时返回的HTML一致,即亚马逊的购买链接。

  红色矩形是电子书的下载链接,也就是请求中使用的cookie。

  与实际网页相比,与网页登录查看的显示页面一致。

  功能完成。接下来看第二种方式

  2、使用请求插入cookies

  完整代码如下:

  # coding:utf-8

import requests

from bs4 import BeautifulSoup

cookie = {

"cisession":"19dfd70a27ec0eecf1fe3fc2e48b7f91c7c83c60",

"CNZZDATA100020196":"1815846425-1478580135-https%253A%252F%252Fwww.baidu.com%252F%7C1483922031",

"Hm_lvt_f805f7762a9a237a0deac37015e9f6d9":"1482722012,1483926313",

"Hm_lpvt_f805f7762a9a237a0deac37015e9f6d9":"1483926368"

}

url = 'https://kankandou.com/book/view/22353.html'

wbdata = requests.get(url,cookies=cookie).text

soup = BeautifulSoup(wbdata,'lxml')

print(soup)

  

  你得到的是登录后显示的 HTML:

  这样,我们就可以方便地使用cookies来获取需要登录验证的网页和资源。

  这里只是简单介绍一下cookies的使用。关于如何获取cookie,手动复制是一种方式。通过代码获取需要用到Selenium,后面章节会讲解,这里不再展示。

  ================================================== ======================

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线