爬取微信文章的小代码写入一个本地网页时需要注意声明html文档编码
2018-06-09 14:02
489 查看
<meta http-equiv="content-type" content="txt/html; charset=utf-8" />
写入一个新的html页时一定要在head标签里加上声明文档编码,不然简体字乱码
import urllib.request
import re
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
# 模拟成浏览器
headers=("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
# 将opener安装为全局
urllib.request.install_opener(opener)
listurl = []
def getlisturl(key,pagestart,pageend):
page=pagestart
# 编码关键词key
keycode = urllib.request.quote(key)
# 编码“&page”
pagecode = urllib.request.quote("&page")
# 循环爬取各页的文章链接
for page in range(pagestart,pageend+1):
# 分别构建各页的url链接,每次循环构建一次
url="http://weixin.sogou.com/weixin?type=2&query="+keycode+pagecode+str(page)
# 使用代理服务器爬取,解决IP被封杀问题
data1 = urllib.request.urlopen(url).read().decode('utf-8')
# 获取文章链接的正则表达式
listurlpat = '<div class="txt-box">.*?(http://.*?)"'
# 获取每页的所有文章链接并添加到列表listurl中
listurl.append(re.compile(listurlpat,re.S).findall(data1))
print("共获取到:"+str(len(listurl))+"页") #便于调试
return listurl
# 通过文章链接获取对应内容
def getcontent(listurl):
i = 0
# 设置本地文件中的开始html编码
html1 = '''<!DOCTYPE html><html><head><meta http-equiv="content-type" content="txt/html; charset=utf-8" /><title>微信文章页面</title></head><body>'''
fh = open("/Users/leilei/Desktop/python_pdf/handget/1.html","wb")
fh.write(html1.encode('utf-8'))
fh.close()
# 再次以追加写入的方式打开文件,以写入对应文章内容
fh = open("/Users/leilei/Desktop/python_pdf/handget/1.html","ab")
# 此时listurl为二维列表形如listurl[][],第一维存储的信息跟第几页相关,第二维存的跟该页第几个文章链接相关
for i in range(0,len(listurl)):
for j in range(0,len(listurl[i])):
url=listurl[i][j]
# 处理成真是url,读者亦可以观察对应网址的关系自行分析,采集网址比真是网址多了一串amp
url=url.replace("amp;","")
# 使用代理去爬取对应网址的内容
data = urllib.request.urlopen(url).read().decode('utf-8')
# 文章标题正则表达式
titlepat="<title>(.*?)</title>"
# 文章内容正则表达式
contentpat = 'id="js_content">(.*?)id="js_sg_bar"'
# 通过对应的正则表达式找到标题并赋给列表title
title = re.compile(titlepat).findall(data)
# 通过对应正则表达式好到内容并赋给列表content
content = re.compile(contentpat,re.S).findall(data)
# 初始化标题与内容
thistitle = "此次没有获取到"
thiscontent="此次没有获取到"
# 如果标题列表不为空,说明找到了标题,去列表第零个元素,即此次标题赋给变量thistitle
if(title!=[]):
thistitle = title[0]
if(content!=[]):
thiscontent=content[0]
# 将标题与内容汇总赋给变量dataall
dataall = "<p>标题为:"+thistitle+"</p><p>内容为:"+thiscontent+"</p><br>"
# 将该篇文章的标题与内容的总信息写入对应文件
fh.write(dataall.encode('utf-8'))
fh.close()
# 设置并写入本地文件的html后面结束部分代码
html2='''</body></html>'''
fh = open("/Users/leilei/Desktop/python_pdf/handget/1.html","ab")
fh.write(html2.encode("utf-8"))
fh.close()
print("Succes")
# 设置关键词
key = "物联网"
# 起始页
pagestart=1
# 爬取到那页
pageend=2
getlisturl(key,pagestart,pageend)
getcontent(listurl)
写入一个新的html页时一定要在head标签里加上声明文档编码,不然简体字乱码
import urllib.request
import re
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
# 模拟成浏览器
headers=("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
# 将opener安装为全局
urllib.request.install_opener(opener)
listurl = []
def getlisturl(key,pagestart,pageend):
page=pagestart
# 编码关键词key
keycode = urllib.request.quote(key)
# 编码“&page”
pagecode = urllib.request.quote("&page")
# 循环爬取各页的文章链接
for page in range(pagestart,pageend+1):
# 分别构建各页的url链接,每次循环构建一次
url="http://weixin.sogou.com/weixin?type=2&query="+keycode+pagecode+str(page)
# 使用代理服务器爬取,解决IP被封杀问题
data1 = urllib.request.urlopen(url).read().decode('utf-8')
# 获取文章链接的正则表达式
listurlpat = '<div class="txt-box">.*?(http://.*?)"'
# 获取每页的所有文章链接并添加到列表listurl中
listurl.append(re.compile(listurlpat,re.S).findall(data1))
print("共获取到:"+str(len(listurl))+"页") #便于调试
return listurl
# 通过文章链接获取对应内容
def getcontent(listurl):
i = 0
# 设置本地文件中的开始html编码
html1 = '''<!DOCTYPE html><html><head><meta http-equiv="content-type" content="txt/html; charset=utf-8" /><title>微信文章页面</title></head><body>'''
fh = open("/Users/leilei/Desktop/python_pdf/handget/1.html","wb")
fh.write(html1.encode('utf-8'))
fh.close()
# 再次以追加写入的方式打开文件,以写入对应文章内容
fh = open("/Users/leilei/Desktop/python_pdf/handget/1.html","ab")
# 此时listurl为二维列表形如listurl[][],第一维存储的信息跟第几页相关,第二维存的跟该页第几个文章链接相关
for i in range(0,len(listurl)):
for j in range(0,len(listurl[i])):
url=listurl[i][j]
# 处理成真是url,读者亦可以观察对应网址的关系自行分析,采集网址比真是网址多了一串amp
url=url.replace("amp;","")
# 使用代理去爬取对应网址的内容
data = urllib.request.urlopen(url).read().decode('utf-8')
# 文章标题正则表达式
titlepat="<title>(.*?)</title>"
# 文章内容正则表达式
contentpat = 'id="js_content">(.*?)id="js_sg_bar"'
# 通过对应的正则表达式找到标题并赋给列表title
title = re.compile(titlepat).findall(data)
# 通过对应正则表达式好到内容并赋给列表content
content = re.compile(contentpat,re.S).findall(data)
# 初始化标题与内容
thistitle = "此次没有获取到"
thiscontent="此次没有获取到"
# 如果标题列表不为空,说明找到了标题,去列表第零个元素,即此次标题赋给变量thistitle
if(title!=[]):
thistitle = title[0]
if(content!=[]):
thiscontent=content[0]
# 将标题与内容汇总赋给变量dataall
dataall = "<p>标题为:"+thistitle+"</p><p>内容为:"+thiscontent+"</p><br>"
# 将该篇文章的标题与内容的总信息写入对应文件
fh.write(dataall.encode('utf-8'))
fh.close()
# 设置并写入本地文件的html后面结束部分代码
html2='''</body></html>'''
fh = open("/Users/leilei/Desktop/python_pdf/handget/1.html","ab")
fh.write(html2.encode("utf-8"))
fh.close()
print("Succes")
# 设置关键词
key = "物联网"
# 起始页
pagestart=1
# 爬取到那页
pageend=2
getlisturl(key,pagestart,pageend)
getcontent(listurl)
相关文章推荐
- 在网页中显示一个层和一个按钮,当点击按钮的时候,让层为不可见,再次点击时为可见的HTML代码
- 网页HTML特殊符号代码大全,HTML特殊字符编码对照表
- [VB.NET]VB.NET中如何向网页提交一个请求,并得到返回的HTML代码?
- HTML代码中,加这段声明 就可以 用IE7的方式 解析了,让IE8始终以IE7兼容模式运行网页
- 将 html 代码写入 js 文件中,然后在网页中引用此 js 文件,实现头模板重用
- AS生成工程文档需要注意编码格式
- 这是一个将指定URL地址的网页 抓取为本地网页的代码。
- 使用Themeleaf时, HTML内嵌的JS代码需要注意< 和 >的问题
- HTML网页制作时需要注意的技巧
- HTML生成一个二维码,微信扫一扫,可以对网页分享
- ASP网站数据采集程序制作:一个采集入库生成本地文件的几个FUCTION(可用来生成HTML静态网页)
- 十进制转化成2,8,16进制数工具。将代码全部复制到一个txt文档中保存,并将文件后缀.txt改为.html,再浏览器打开即可
- Openh323和Windows平台上关于G.723.1编码需要注意的一个问题
- 用gen_tcp创建本地服务器需要注意的一个问题
- 写一个纯JAVA代码需要注意的几点
- 制作网页 完成后需要注意的编码问题
- 这是一个求两数之和的题目,输入多对用空格分开的两个数a b,输出a+b的和,每一对数据的和占一行。编写代码时需要注意的是,由于没有指出有多少对输入数据,因此我们可以编写如下代码:
- 加载一个本地html网页,网页里图片也是本地的图片
- 通过Html网页调用本地安卓(android)app程序代码
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式