正则表达式练习
爬取小说
获取每部小说的url
import requests
import re
# 1.我要拿到纯爱小说这个分类所对应的第一页的小说内容
def get_novel_list():
response = requests.get('http://www.quanshuwang.com/list/3_1.html')
response.encoding = 'gbk'
html = response.text
# 第一次匹配 匹配每一部小说的url
reg = r'<a target="_blank" href="(.*?)" class="l mr10">'
print(re.findall(reg,html))
get_novel_list()
获取每部小说章节列表
import requests
import re
# 1.我要拿到纯爱小说这个分类所对应的第一页的小说内容
def get_novel_list():
response = requests.get('http://www.quanshuwang.com/list/1_1.html')
response.encoding = 'gbk'
html = response.text
# 第一次匹配 匹配每一部小说的url
reg = r'<a target="_blank" href="(.*?)" class="l mr10">'
return re.findall(reg,html)
# 2.我们要拿到每一部小说的章节列表
def get_chapter_list(novel_url):
# 请求小说的url
response = requests.get(novel_url)
response.encoding = 'gbk'
html = response.text
# 第二次匹配 每一部小说所对应的 开始阅读
reg = r'<a href="(.*?)" class="reader"'
print(re.findall(reg,html))
for novel_url in get_novel_list():
# print(i)
get_chapter_list(novel_url)
break # 暂时不要把每部小说都打开
# 切记 不用break的时候记得点停止,不然网站会封你的IP
获取每部小说的每章节地址和名字
import requests
import re
# 1.我要拿到纯爱小说这个分类所对应的第一页的小说内容
def get_novel_list():
response = requests.get('http://www.quanshuwang.com/list/3_1.html')
response.encoding = 'gbk'
html = response.text
# 第一次匹配 匹配每一部小说的url
reg = r'<a target="_blank" href="(.*?)" class="l mr10">'
return re.findall(reg,html)
# 2.我们要拿到每一部小说的章节列表
def get_chapter_list(novel_url):
# 请求小说的url
response = requests.get(novel_url)
response.encoding = 'gbk'
html = response.text
# 第二次匹配 每一部小说所对应的 开始阅读
reg = r'<a href="(.*?)" class="reader"'
# 拿到了章节列表所对应的url
chapter_list_url = re.findall(reg,html)[0]
response = requests.get(chapter_list_url)
response.encoding = 'gbk'
html = response.text
# 第三次匹配 匹配不同章节的
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'
return re.findall(reg,html)
for novel_url in get_novel_list():
# print(i)
get_chapter_list(novel_url)
break # 暂时不要把每部小说都打开
# 切记 不用break的时候记得运行一会点停止,不然网站会封你的IP
获取每部小说的url
import requests
import re
# 1.我要拿到纯爱小说这个分类所对应的第一页的小说内容
def get_novel_list():
response = requests.get('http://www.quanshuwang.com/list/3_1.html')
response.encoding = 'gbk'
html = response.text
# 第一次匹配 匹配每一部小说的url
reg = r'<a target="_blank" href="(.*?)" class="l mr10">'
return re.findall(reg,html)
# 2.我们要拿到每一部小说的章节列表
def get_chapter_list(novel_url):
# 请求小说的url
response = requests.get(novel_url)
response.encoding = 'gbk'
html = response.text
# 第二次匹配 每一部小说所对应的 开始阅读
reg = r'<a href="(.*?)" class="reader"'
# 拿到了章节列表所对应的url
chapter_list_url = re.findall(reg,html)[0]
response = requests.get(chapter_list_url)
response.encoding = 'gbk'
html = response.text
# 第三次匹配 匹配不同章节的
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'
return re.findall(reg,html)
# 获取小说每一章的内容
def get_chapter_content(chapter_url):
response = requests.get(chapter_url)
response.encoding = 'gbk'
print(response.text)
for novel_url in get_novel_list():
# print(i)
for chapter_url,chapter_name in get_chapter_list(novel_url):
# chapter_url = i[0]
# chapter_url = i[2]
# print(chapter_url,chapter_name)
get_chapter_content(chapter_url)
break
break # 暂时不要把每部小说都打开
# 切记 不用break的时候记得运行一会点停止,不然网站会封你的IP
保存小说内容
(注意:不够完善!)
import requests
import re
# 1.我要拿到纯爱小说这个分类所对应的第一页的小说内容
def get_novel_list():
response = requests.get('http://www.quanshuwang.com/list/3_1.html')
response.encoding = 'gbk'
html = response.text
# 第一次匹配 匹配每一部小说的url
reg = r'<a target="_blank" href="(.*?)" class="l mr10">'
return re.findall(reg,html)
# 2.我们要拿到每一部小说的章节列表
def get_chapter_list(novel_url):
# 请求小说的url
response = requests.get(novel_url)
response.encoding = 'gbk'
html = response.text
# 第二次匹配 每一部小说所对应的 开始阅读
reg = r'<a href="(.*?)" class="reader"'
# 拿到了章节列表所对应的url
chapter_list_url = re.findall(reg,html)[0]
response = requests.get(chapter_list_url)
response.encoding = 'gbk'
html = response.text
# 第三次匹配 匹配不同章节的
reg = r'<li><a href="(.*?)" title=".*?">(.*?)</a></li>'
return re.findall(reg,html)
# 获取小说每一章的内容
def get_chapter_content(chapter_url):
response = requests.get(chapter_url)
response = requests.get(chapter_url)
response.encoding = 'gbk'
html = response.text
# 第一个 在匹配的过程中()是有特殊意义的所有我们在进行一个转义
# 第二个 匹配多行内容我们需要re.S
reg = r'style5\(\);</script>(.*?)<script type="text/javascript">style6\(\)'
# print(re.findall(reg,html,re.S)[0])
return re.findall(reg,html,re.S)[0]
for novel_url in get_novel_list():
# print(i)
for chapter_url,chapter_name in get_chapter_list(novel_url):
# chapter_url = i[0]
# chapter_url = i[2]
# print(chapter_url,chapter_name)
chapter_content = get_chapter_content(chapter_url)
# 保存文件
fn = open(chapter_name + '.html','w')
fn.write(chapter_content)
fn.close()
# break
break # 暂时不要把每部小说都打开
# 记 不用break的时候记得运行一会点停止,不然网站会封你的IP
爬取图片
瀑布流数据的说明
瀑布流的数据就是网站页面的布局样式
特点:
1.正版以图片为主,按照大小不一的图片排列
2.唯美
3.操纵简单
爬取一张图片
import requests
url = 'https://p1.ssl.qhimg.com/dmsmty/1080_965_/t0145ae61177f02685f.jpg'
with open('1.jpg','ab') as f:
r = requests.get(url)
f.write(r.content)
获取所有图片的url
import requests
import re
# 1.拿到目标url
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=88'
# 2.拿到网页代码
r = requests.get(url)
ret = r.text
# print(ret)
# 3.拿到图片对应的url
result = re.findall('"thumbURL":"(.*?)"',ret)
print(result)
保存多张图片
import requests
import re
# 1.拿到目标url
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=88'
# 2.拿到网页代码
r = requests.get(url)
ret = r.text
# print(ret)
# 3.拿到图片对应的url
result = re.findall('"objURL":"(.*?)"',ret)
# print(result)
# 4.保存图片
# 保存多张图片
for i in result:
# 拿到图片的名字
name = i[-10:]
print(name)
with open('img/'+name,'wb') as f:
r = requests.get(i)
f.write(r.content)
处理图片格式问题
# 解决图片格式问题
end = re.search('(.jpg|.png|.jpeg|.gif)',name)
if end == None:
name =name + '.jpg'
自定义下载图片
import requests
import re
import os
# 1.拿到目标url
word = input('请输入:')
url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1582558781363_R&pv=&ic=0&nc=1&z=&hd=&latest=©right=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word='+word
# 判断是否有word文件夹
if not os.path.exists(word):
os.mkdir(word)
# 2.拿到网页代码
r = requests.get(url)
ret = r.text
# print(ret)
# 3.拿到图片对应的url
result = re.findall('"objURL":"(.*?)"',ret)
# print(result)
# 4.保存图片
# 保存多张图片
for i in result:
# 拿到图片的名字
name = i[-10:]
print(name)
# 解决图片格式问题
end = re.search('(.jpg|.png|.jpeg|.gif)$',name)
if end == None:
name =name + '.jpg'
# 解决文件夹路径问题
name = re.sub('/','',name)
with open(word + '/'+name,'wb') as f:
r = requests.get(i)
f.write(r.content)