import chardet
import urllib.request page = urllib.request.urlopen('http://photo.sina.com.cn/') #打开网页
htmlCode = page.read() #获取网页源代码 print(chardet.detect(htmlCode)) #打印返回网页的编码方式
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
data = htmlCode.decode('utf-8')
print(data) #打印网页源代码
pageFile = open('E:\\pageCode.txt','wb')#以写的方式打开pageCode.txt
pageFile.write(htmlCode)#写入
pageFile.close()#开了记得关
获取其他信息

打开pageCode.txt文件(也可以直接在原网页F12调试获取),查看需要获取数据的标签信息。

比如我现在要拿图片

写出图片的正则表达式: reg = r'src="(.+?\.jpg)"' 

解释下吧——匹配以src="开头然后接一个或多个任意字符(非贪婪),以.jpg" 结尾的字符串。比如图中红框内src后 双引号里的链接就是一个匹配的字符串。

接着我们要做的就是从get_html方法返回的辣么长一串字符串中 拿到 满足正则表达式的 字符串。

用到python中的re库中的 re.findall(str) 它返回一个满足匹配的字符串组成的列表
import re
import chardet
import urllib.request page = urllib.request.urlopen('http://www.meituba.com/tag/juesemeinv.html') #打开网页
htmlCode = page.read() #获取网页源代码 #print(chardet.detect(htmlCode)) #查看编码方式
data = htmlCode.decode('utf-8')
#print(data) #打印网页源代码 #pageFile = open('pageCode.txt','wb')#以写的方式打开pageCode.txt
#pageFile.write(htmlCode)#写入
#pageFile.close()#开了记得关 reg = r'src="(.+?\.jpg)"'#正则表达式
reg_img = re.compile(reg)#编译一下,运行更快
imglist = reg_img.findall(data)#进行匹配
for img in imglist:
print(img)
http://ppic.meituba.com:83/uploads3/181201/3-1Q20111553V11.jpg
http://ppic.meituba.com:83/uploads2/180622/3-1P62215532D61.jpg
http://ppic.meituba.com:83/uploads2/180605/3-1P6051000144I.jpg
http://ppic.meituba.com:83/uploads2/170511/8-1F5110URc35.jpg
http://ppic.meituba.com:83/uploads/160322/8-1603220U50O23.jpg
http://ppic.meituba.com:83/uploads2/180317/3-1P31F91U1X9.jpg
http://ppic.meituba.com:83/uploads/160718/7-160GQ51G0b4.jpg
http://ppic.meituba.com:83/uploads2/170517/8-1F51G50301Q3.jpg
http://ppic.meituba.com:83/uploads/161010/7-1610101A202B0.jpg
http://ppic.meituba.com:83/uploads2/171102/7-1G102093511F7.jpg
http://ppic.meituba.com:83/uploads2/170901/7-1FZ1100545438.jpg
http://ppic.meituba.com:83/uploads/160625/8-160625093044631.jpg
http://ppic.meituba.com:83/uploads/160419/7-160419161553153.jpg
http://ppic.meituba.com:83/uploads2/170323/7-1F323103404A2.jpg
http://ppic.meituba.com:83/uploads2/170322/7-1F322105R1255.jpg
http://ppic.meituba.com:83/uploads2/170211/7-1F21110040Y63.jpg
http://ppic.meituba.com:83/uploads2/170110/7-1F110102005930.jpg
http://ppic.meituba.com:83/uploads/160618/8-16061Q04450391.jpg
http://ppic.meituba.com:83/uploads2/170330/3-1F3301HI6138.jpg
http://ppic.meituba.com:83/uploads2/161230/4-161230100U5V8.jpg
然后将图片下载到本地

urllib库中有一个 urllib.request.urlretrieve(链接,名字) 方法,它的作用是以第二个参数为名字下载链接中的内容,我们来试用一下
x = 0
for img in imglist:
print(img)
urllib.request.urlretrieve('http://ppic.meituba.com/uploads/160322/8-1603220U50O23.jpg', '%s.jpg' % x)
x += 1
import re
import urllib.request def getGtmlCode():
html = urllib.request.urlopen("http://www.quanshuwang.com/book/44/44683").read() #获取网页源代码
html = html.decode("gbk") #转成该网站格式
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>' #根据网站样式匹配的正则:(.*?)可以匹配所有东西,加括号为我们需要的
reg = re.compile(reg)
urls = re.findall(reg, html)
for url in urls:
#print(url)
chapter_url = url[0] #章节路径
chapter_title = url[1] #章节名
chapter_html = urllib.request.urlopen(chapter_url).read() #获取该章节的全文代码
chapter_html = chapter_html.decode("gbk")
chapter_reg = r'</script>&nbsp;&nbsp;&nbsp;&nbsp;.*?<br />(.*?)<script type="text/javascript">' #匹配文章内容
chapter_reg = re.compile(chapter_reg,re.S)
chapter_content = re.findall(chapter_reg, chapter_html)
for content in chapter_content:
content = content.replace("&nbsp;&nbsp;&nbsp;&nbsp;","") #使用空格代替
content = content.replace("<br />","") #使用空格代替
print(content)
f = open('E:\\aa\\{}.txt'.format(chapter_title),'w') #保存到本地
f.write(content) getGtmlCode()

吴裕雄--python学习笔记:爬虫的更多相关文章

  1. 吴裕雄--python学习笔记:爬虫基础

    一.什么是爬虫 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息. 二.Python爬虫架构 Python 爬虫架构主要由五个部分组成,分别是调度器.URL管理器.网页下载器.网 ...

  2. 吴裕雄--python学习笔记:爬虫包的更换

    python 3.x报错:No module named 'cookielib'或No module named 'urllib2' 1. ModuleNotFoundError: No module ...

  3. 吴裕雄--python学习笔记:sqlite3 模块

    1 sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的 ...

  4. 吴裕雄--python学习笔记:os模块函数

    os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd:得 ...

  5. 吴裕雄--python学习笔记:os模块的使用

    在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块. 1.当前路径及路径下 ...

  6. 吴裕雄--python学习笔记:BeautifulSoup模块

    import re import requests from bs4 import BeautifulSoup req_obj = requests.get('https://www.baidu.co ...

  7. 吴裕雄--python学习笔记:通过sqlite3 进行文字界面学生管理

    import sqlite3 conn = sqlite3.connect('E:\\student.db') print("Opened database successfully&quo ...

  8. 吴裕雄--python学习笔记:sqlite3 模块的使用与学生信息管理系统

    import sqlite3 cx = sqlite3.connect('E:\\student3.db') cx.execute( '''CREATE TABLE StudentTable( ID ...

  9. python学习笔记——爬虫学习中的重要库urllib

    1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...

随机推荐

  1. BBS登录功能

    BBS登录功能 一.后端实现 1.实现验证码 from PIL import Image, ImageDraw, ImageFont import random from io import Byte ...

  2. Mac 终端实现快速定位命令 自动补全目录

    基于macOS oh-my-zsh 切换终端主题 incr.zsh 实现快速定位命令 自动补全目录 效果预览 步骤 1.安装 oh-my-zsh sh -c "$(curl -fsSL ht ...

  3. 把cifar数据转换为图片

    参考 https://gist.github.com/fzliu/64821d31816bce595a4bbd98588b37f5 """ make_cifar10.py ...

  4. iOS开发-消息初认识

    一.消息循环(runLoop)的作用 1,防止程序退出, 2,接受事件 3,如果没有事件,让程序自动休眠   二.消息源    1, 输入源:键盘.鼠标.NSBoard.NSPort    2,定时源 ...

  5. LeetCode——71.简化路径

    以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (..) 表示将目录切换到上一级 ...

  6. 金蝶cloud成本核算流程

  7. ruoyi IpUtils

    package com.ruoyi.common.utils; import java.net.InetAddress; import java.net.UnknownHostException; i ...

  8. SQLite-外键约束/表链接查询

    外键约束: 表一的某个字段关联到表二的某个字段 例子: 国家表:t_country

  9. 基础服务系列-Jupyter Install TensorFlow

    TensorFlow is a deep learning framework that provides an easy interface to a variety of functionalit ...

  10. Perl:正则中问号的四周用途:1.字面意义的问号 2. 量词 3. 表示非贪心的修饰符 4.用以表示不具有记忆功能的圆括号

    Perl:正则中问号的四周用途:1.字面意义的问号  2. 量词   3. 表示非贪心的修饰符  4.用以表示不具有记忆功能的圆括号 非贪心:在量词后面加?即可