正则爬取糗事百科
2017-12-12 20:42
99 查看
其中涉及到了对于消息头的使用
设置请求的身份,如果没有,服务器可能会没有响应
这个可以为任意的,没有每个网页规定的。通过后面的学习,知道网页该部分的查找位置在查看元素-网络中。
request = urllib2.Request(url=url, headers=headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
pattern_author = re.compile(u'<h2>(.*?)</h2>',re.S)
pattern_content = re.compile(u'<div class="content">\n<span>\n\n\n(.*?)</span>',re.S)
pattern_comment = re.compile(u'<i class="number">(\d*)</i> 评论',re.S)
find_author = re.findall(pattern_author, content)+find_author
find_content = re.findall(pattern_content, content)+find_content
find_comment = re.findall(pattern_comment, content)+find_comment
当时是作为将作者、评论、时间进行分开爬取的,其中:
urllib2.urlopen(url[, data][, timeout]) #传url时候,用法同urllib里的urlopen II.1.1 它打开URL网址,url参数可以是一个字符串url或者是一个Request对象。可选的参数timeout,阻塞操作以秒为单位,如尝试连接(如果没有指定,将使用设置的全局默认timeout值)。urlopen方法也可通过建立了一个Request对象来明确指明想要获取的url。调用urlopen函数对请求的url返回一个response对象。这个response类似于一个file对象,所以用.read()函数可以操作这个response对象
compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
完整代码如下:
#coding:utf-8
import urllib2
import re
import os
savedir = 'D:\picture\\'
find_author = []
find_comment = []
find_content = []
for page in range(1, 5):
url = 'https://www.qiushibaike.com/8hr/page/' + str(page)
print page
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url=url, headers=headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
pattern_author = re.compile(u'<h2>(.*?)</h2>',re.S)
pattern_content = re.compile(u'<div class="content">\n<span>\n\n\n(.*?)</span>',re.S)
pattern_comment = re.compile(u'<i class="number">(\d*)</i> 评论',re.S)
find_author = re.findall(pattern_author, content)+find_author
find_content = re.findall(pattern_content, content)+find_content
find_comment = re.findall(pattern_comment, content)+find_comment
# os.mkdirs(savedir)
file = open(savedir + 'text.txt','w')
for i in xrange(len(find_author)):
# print i
# print find_content[i]
content = find_content[i].replace("<br/>", " ")
# print content
result1 = find_author[i] + content+find_comment[i]
file.write(result1.encode('utf-8'))
file.close()
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent }
设置请求的身份,如果没有,服务器可能会没有响应
这个可以为任意的,没有每个网页规定的。通过后面的学习,知道网页该部分的查找位置在查看元素-网络中。
request = urllib2.Request(url=url, headers=headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
pattern_author = re.compile(u'<h2>(.*?)</h2>',re.S)
pattern_content = re.compile(u'<div class="content">\n<span>\n\n\n(.*?)</span>',re.S)
pattern_comment = re.compile(u'<i class="number">(\d*)</i> 评论',re.S)
find_author = re.findall(pattern_author, content)+find_author
find_content = re.findall(pattern_content, content)+find_content
find_comment = re.findall(pattern_comment, content)+find_comment
当时是作为将作者、评论、时间进行分开爬取的,其中:
urllib2.urlopen(url[, data][, timeout]) #传url时候,用法同urllib里的urlopen II.1.1 它打开URL网址,url参数可以是一个字符串url或者是一个Request对象。可选的参数timeout,阻塞操作以秒为单位,如尝试连接(如果没有指定,将使用设置的全局默认timeout值)。urlopen方法也可通过建立了一个Request对象来明确指明想要获取的url。调用urlopen函数对请求的url返回一个response对象。这个response类似于一个file对象,所以用.read()函数可以操作这个response对象
compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
完整代码如下:
#coding:utf-8
import urllib2
import re
import os
savedir = 'D:\picture\\'
find_author = []
find_comment = []
find_content = []
for page in range(1, 5):
url = 'https://www.qiushibaike.com/8hr/page/' + str(page)
print page
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
request = urllib2.Request(url=url, headers=headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
pattern_author = re.compile(u'<h2>(.*?)</h2>',re.S)
pattern_content = re.compile(u'<div class="content">\n<span>\n\n\n(.*?)</span>',re.S)
pattern_comment = re.compile(u'<i class="number">(\d*)</i> 评论',re.S)
find_author = re.findall(pattern_author, content)+find_author
find_content = re.findall(pattern_content, content)+find_content
find_comment = re.findall(pattern_comment, content)+find_comment
# os.mkdirs(savedir)
file = open(savedir + 'text.txt','w')
for i in xrange(len(find_author)):
# print i
# print find_content[i]
content = find_content[i].replace("<br/>", " ")
# print content
result1 = find_author[i] + content+find_comment[i]
file.write(result1.encode('utf-8'))
file.close()
相关文章推荐
- Python运用正则表达式爬取糗事百科
- 使用HttpGet协议与正则表达实现桌面版的糗事百科
- python BeautifulSoup 正则匹配糗事百科并保存到本地
- python 爬虫004-使用urllib2与正则表达式扒取糗事百科新鲜页首页帖子
- 用正则爬取糗事百科的段子
- 糗事百科(Python(正则表达式、BeautifulSoup、Lxml) & R(rvest))
- 正则的应用--糗事百科(数据写入数据库中)
- 简单的JTML+JS验证用户名、电话号码格式_JS自定义function_正则表达式
- 【JAVA基础】正则表达式
- 验证手机号码格式的正则表达式编写思路详解
- 正则使用注意事项
- 正则表达式30分钟入门教程
- 正则表达式 学习笔记(一)
- 正则表达式按标点截取一定长度的中文内容
- JS 正则表达式从地址中提取省市县
- 跟着老毕学Java之正则表达式
- 常用的几个正则表达式的写法
- JavaScript中的正则表达式
- 正则——验证时间
- 正则