一、爬取全书网

1)获取源代码,解决编码问题

#!/usr/bin/env python
#-*-coding: utf8-*-
# python2.7.10
import urllib,urllib2       # python2 爬虫必备的库
def getNovelListUrl():
    html = urllib.urlopen('http://www.quanshuwang.com/list/1_1.html').read()
    # read() 获取源代码的方法
    print(html)     # li><a href="http://www.quanshuwang.com/book_16860.html" target="_blank">�ܲõ�����С����</a></li>  编码故障
getNovelListUrl()

a)python的执行脚本是uft-8的编码

b)源代码的编码是gdk的编码,网页查看源代码,shift+f 弹出查找对话框,输入 char 

  <meta http-equiv="Content-Type" content="text/html; charset=gbk">

html = urllib.urlopen('http://www.quanshuwang.com/list/1_1.html').read().decode('gbk').encode('utf-8')

小结:编码的转换

## 编码   乱码的产生
- 乱码的产生:显示的编码和本身不一致
  网页编码:gbk
  显示的编码:utf-8
  str unicode
  gbk -> unicode -> uft-8
  decode:解码:把一种编码转换成unicode
  encode:编码:把unicode转换成一种编码
  encode('gbk').decode('utf-8')
  encode('utf-8').decode('gbk')
  decode('gbk').encode('gbk')

2)用正则获取到书的网址,书名,作者

def getNovelListUrl():
    html = urllib.urlopen('http://www.quanshuwang.com/list/1_1.html').read().decode('gbk').encode('utf-8')
    reg = r'<a target="_blank" title=".*?" href="(.*?)" class="clearfix stitle">(.*?)</a>作者:<a href=".*?">(.*?)</a>'
    # (.*?) 指我们需要获取到的内容,而整句话说明所有的格式一样,,,   .*? 不需要的内容,跳过
    urllist = re.findall(reg,html)
    print(urllist)
如果在匹配的正则字段中有 () ,需要在前面 /(/) 转义一下
import urllib,urllib2       # python2 爬虫必备的库
import re
def getNovelListUrl():
    html = urllib.urlopen('http://www.quanshuwang.com/list/1_1.html').read().decode('gbk').encode('utf-8')
    reg = r'<a target="_blank" title=".*?" href="(.*?)" class="clearfix stitle">(.*?)</a>作者:<a href=".*?">(.*?)</a>'
    urllist = re.findall(reg,html)
    return urllist
for noverl in getNovelListUrl():
    print(noverl)
    break
# 获取到需要的url,和书名,作者 # ('http://www.quanshuwang.com/book_118835.html', '\xe7\x81\xab\xe5\xbd\xb1\xe4\xb9\x8b\xe6\x95\x91\xe4\xb8\x96\xe4\xb8\xbb', '\xe8\x8c\x83\xe4\xbb\xaa\xe5\x90\x8c')

  

  

 

posted on 2018-12-24 11:02  可口_可乐  阅读(262)  评论(0编辑  收藏  举报