最近有个好友让我帮忙爬取个小说,这个小说是前三十章直接可读,后面章节需要充值VIP可见。所以就需要利用VIP账户登录后,构造Cookie,再用Python的获取每章节的url,得到内容后再使用 PyQuery 解析内容。

  注意:构造Cookie的过程中,需要你在 Chrome/Firefox 登录,然后自己在控制台查看 cookie,然后手动加入。

第一部分:手动构造cookie登录

 #version 2.7

 #!/usr/bin/python

 import HTMLParser
import urlparse
import urllib
import urllib2
import cookielib
import string
import re cj = cookielib.LWPCookieJar() def make_cookie(name, value):
return cookielib.Cookie(
version=0,
name=name,
value=value,
port=None,
port_specified=False,
domain="yourdomain",
domain_specified=True,
domain_initial_dot=False,
path="/",
path_specified=True,
secure=False,
expires=None,
discard=False,
comment=None,
comment_url=None,
rest=None
) cj.set_cookie(make_cookie("name", "value")) cookie_support = urllib2.HTTPCookieProcessor(cj)
opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)
urllib2.install_opener(opener) request = "http://vip.xxx.com/m/xxx.aspx?novelid=12&chapterid=100&page=1" response = urllib2.urlopen(request)
text = response.read()
print text

  注意:修改22行的 domain,增加35行的 cookie 项, 修改43行的 你的要爬取页面的地址,下面是Chrome下看登录帐号的cookie。

本节参考:百度知道博客园:python模拟登录, 用Python模拟登录网站

第二部分:

  本以为简单,结果折腾了很久。原因是 Python 2.7 的默认编码是 ASCII,导致 BS(Beautifule soup)的结果总是乱码,其实也不是乱码,明显是汉字的 unicode 编码。

  python 2.7 内部默认编码 sys.defaultencoding 是 ASCII。所以在 BS 解析出的结果出现汉字后,python 将自己无法理解的 汉字 使用 ASCII 格式进行编码存储,导致后面写文件时总是出现 “TypeError: expected a character buffer object” 错误。代码中将 BS 的结果使用 ASCII 解码后,再编码为utf-8 就解决了问题。当然还有其他办法,可以看下面的参考链接。

  注意:代码文件首行的 #coding=utf-8 的作用只是本代码文件的编码格式设置为 utf-8(这样就可以写中文注释),和上面讲的编码解码不要混淆。

#coding=utf-8
#version 2.7
#!/usr/bin/python import HTMLParser
import urlparse
import urllib
import urllib2
import cookielib
import string
import re#--------------
hosturl = 'http://login.zhizihuan.com/login/m'
posturl = 'http://m.zhizihuan.com/'
#...此处省略
page = response.read()
#------------- #part two
from bs4 import BeautifulSoup
from bs4 import SoupStrainer
#beautiful soup 可不用安装,可直接下载该包导入项目即可,因为我是用完就扔掉代码,不发布
#解析部分文档 http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#id58 only_tags_with_id = SoupStrainer(id="htmlmain") #提取ID为htmlmain的标签及子元素
novelCnt = BeautifulSoup(page, "html.parser", parse_only=only_tags_with_id).decode('ascii').encode('utf-8')#指定解析器和过滤
print novelCnt

第三部分:写入本地文件

#part three
file = open("/Users/ql/Documents/novel.txt",'a')
file.write(novelCnt)
file.flush();
file.close()

本节参考:Python文件编码/默认字符转码

《完》

Python手动构造Cookie模拟登录后获取网站页面内容的更多相关文章

  1. C#程序模拟登录批量获取各种邮件内容信息

    一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个app有一个活动,通过邮箱注册账号激活可以领5元红包,而恰恰你手上又有一批邮箱可用,那么批量获取邮箱中的激活链接去激活则是 ...

  2. 获取windows身份认证网站页面内容

    有些网站必须登录才能获取到页面内容. 代码如下,可获取数据. var url = "https://yunda-api-test.appspot.com/int/parcel?wait=tr ...

  3. Java通过httpclient获取cookie模拟登录

    package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.Htt ...

  4. Python3之利用Cookie模拟登录

    Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1.       在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...

  5. PHP cURL 使用cookie 模拟登录

    cURL是什么 cURL: http://php.net/manual/zh/book.curl.php PHP 支持 Daniel Stenberg 创建的 libcurl 库,能够连接通讯各种服务 ...

  6. PHP模拟登录并获取数据

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  7. 《转载》python爬虫实践之模拟登录

    有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录.   浏览器访问服务器的过程   在用户访问网页时,不论是通过URL输入域名或IP ...

  8. Python 爬虫实战5 模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 ...

  9. PHP获取Cookie模拟登录CURL

    要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了.利用抓包数据发现,Google 判断了 cookie ...

随机推荐

  1. C++里容易忽视却不能忽视的

    1 define 只是简单地文本替换. 2 每个机器的字长不同. 3 每个类型在不同的机器上,所占用的内存空间不同. 4 每个机器内部的字节大小端不同. 5 并不是所有的编译器或机器都支持最新的C++ ...

  2. (转)myrepo

    源作者主页:https://copr.fedoraproject.org/coprs/mosquito/myrepo/ 源作者github: https://github.com/1dot75cm/m ...

  3. Record:逻辑分区下新建简单卷后其他卷被删除

    上图是恢复后的磁盘情况,恢复前的情况没有截图. 事情是这样:扩展分区中原本有4个逻辑分区.想将其中一个分区(MySpace,第一个分区)压缩出部分空间新建一个分区.经过 压缩卷->新建简单卷 后 ...

  4. ECMAScript一元操作符

    在ECMAScript中提供了一元操作符进行简单的运算,一元操作符是ECMAScript中最简单的操作符,它只能对一个值进行操作. 一元操作符有两种类型,一种是递增和递减操作符,一种是一元加和一元减操 ...

  5. 网站开发常用jQuery插件总结(15)上传插件blueimp

    在介绍这个插件之前,先吐槽一下.这个插件功能很强大.带有的功能有:上传(单个文件或批量文件),自动上传或点击按钮上传,上传前缩略图显示,判断文件格式,上传前的文件操作,上传时进度条显示等功能.如果你用 ...

  6. html定义对象

    <object>定义一个对象<param>为对象定义一个参数 参数的名称:name = "" 参数的值:value=""classid: ...

  7. html5有什么布局标签

    header h1 nav ul li a section(id) div h3 article figure img article h4 header time datetime='' body ...

  8. python之PIL安装问题

    ··在windows安装模块 总是出现问题,今天安装PIL的 首先提示我的是pip命令出错,这应该是当你安装Python2.7的时候 并没有把pip模块添加进去 导致出现了这样的一个问题,为了省事,我 ...

  9. mysql统计表的大小

    如下是sql语句: SELECT TABLE_NAME as name,DATA_LENGTH+INDEX_LENGTH as len,TABLE_ROWS as rows FROM informat ...

  10. Python全栈开发之MySQL(二)------navicate和python操作MySQL

    一:Navicate的安装 1.什么是navicate? Navicat是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.它的设计符合数据库管理员.开发人员及中小 ...