一、爬取全书网
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') |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 2025成都.NET开发者Connect圆满结束
· 在 VS Code 中,一键安装 MCP Server!
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 后端思维之高并发处理方案
· 千万级大表的优化技巧