随笔 - 105,  文章 - 31,  评论 - 3,  阅读 - 13万

一、爬取全书网

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">

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

小结:编码的转换

1
2
3
4
5
6
7
8
9
10
11
## 编码   乱码的产生
- 乱码的产生:显示的编码和本身不一致
  网页编码: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)
如果在匹配的正则字段中有 () ,需要在前面 /(/) 转义一下
1
2
3
4
5
6
7
8
9
10
11
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<br># 获取到需要的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   可口_可乐  阅读(263)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
阅读排行:
· 2025成都.NET开发者Connect圆满结束
· 在 VS Code 中,一键安装 MCP Server!
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示