整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

数据采集代码实战

.python http请求模块

1.1 python http请求常识介绍

首先要清楚http协议信息包含:uri、body和headers等部分;http请求方式有以下几种:

  • Get
  • Post
  • Put
  • Delete
  • Head
  • Patch
  • Options
  • Propfind
  • Copy
  • Move

常见的http请求有:get、post和head;在python常用的http网络请求模块随着python版本的不同,大致如下所示:

  • python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httplib2, requests。
  • python3.X 有这些库名可用: urllib, urllib3, httplib2, requests。

两者都有的urllib3和requests, 它们不是标准库. urllib3 提供线程安全连接池和文件post支持,与urllib及urllib2的关系不大. requests 自称HTTP for Humans, 使用更简洁方便。

在这里我们只讲解python2.X的http网络请求模块。

  • Urllib和urllib2的区别:
    • urllib2可以接受Request对象为URL设置头信息,修改用户代理,设置cookie等, urllib只能接受一个普通的URL。
    • urllib提供一些比较原始基础的方法而urllib2没有这些, 比如 urlencode。
  • httplib 和 httplib2的区别:
    • httplib 是http客户端协议的实现,通常不直接使用, urllib是以httplib为基础 ;httplib2 是第三方库, 比httplib有更多特性。


1.2 http请求经验

经验具体如下所示:

  • 合理使用gzip,使发送的请求可以更快的响应。
  • requests 是一款非常人性化的 python http 库,但起对网页的编码识别却一直很蛋疼,时常出现乱码。可以从官方的 API 文档中找出乱码的根本原因;可见,requests 是通过 http header 猜测页面编码,如果 header 中不存在charset 就认为编码为 ISO-8859-1。这样的话,对于返回头中没有指定页面编码的情况,自然就出现乱码了。通常的解决办法如下所示:

1.3 cookie的使用

在网络请求中cookie的使用是个很重要的方面,其中保存记录重要请求行为的cookie,可以将使用的cookie保存到本地,可以从本地加载需要的cookie。

创建cookielib.CookieJar对象自动管理Cookie稍繁琐一些,但是一旦创建,可供urllib2创建opener,后续的所有cookie更新和过期删除都是自动处理的。


可用网址:

  • http://www.lijiejie.com/python-http-request-with-cookie-string-part-2/ 其中例子的作用和模拟登陆一样
  • http://cuiqingcai.com/968.html 介绍python cookie的使用
  • http://www.jb51.net/article/46499.htm 介绍python cookie的使用,侧重点介绍cookie
  • http://www.lijiejie.com/python-http-request-with-cookie-string/

1.4 其它http请求模块

可用的其它python http请求模块:

u frequests

u grequests

其中frequests和grequests的使用方式相同,其中frequests的稳定性高于grequests;简单使用如下所示:

2.响应结果数据格式

一般常见的响应结果格式为:

  • json数据
  • html数据
  • 纯文本

3.各种数据格式的解析方法

3.1 Html解析方法

常见的html数据解析方法为:

  • XPATH选择器
  • CSS选择器
  • 正则表达式

3.2 纯文本解析方法

常见的纯文本解析方法为:

  • 正则表达式
  • Python字符串处理,index、find、split、join等函数

3.3网页正文提取

网页正文提取重要性:

  • 对于Web信息检索来说,网页正文抽取是后续处理的关键。

正则表达式可以准确的抽取某一固定格式的页面,但面对形形色色的HTML,使用规则处理难免捉襟见肘。能不能高效、准确的将一个页面的正文抽取出来,并做到在大规模网页范围内通用,这是一个直接关系上层应用的难题。

调研的方案:

  • Joyhtml

JoyHTML的目的是解析HTML文本当中的链接和正文,利用超链接密度法为主要判断依据的标记窗算法,采用DOM树解析模式。

  • Boilerpipe

这个Java类库提供算法来探测和删除在一个网页中主文本内容旁多余的重复内容。它已经有提供特殊的策略来处理一些常用的功能如:新闻文章提取。

  • cx-extractor

本算法首次将网页正文抽取问题转化为求页面的行块分布函数,并完全脱离HTML标签。通过线性时间建立行块分布函数图,由此图可以直接高效、准确的定位网页正文。同时采用统计与规则相结合的方法来解决系统的通用性问题。

  • Readability

在这里我们只使用其中cx-extractor和readability;这里对cx-extractor和readability做个对比,如下所示:

  • cx-extractor优于readability(自己也在实际任务中验证过)。
    • 简单:java代码不超过400行
    • 准确率高:> 95%
    • 算法时间复杂度为线性

cx-extractor使用实例如下图所示:

cx-extractor与readability的对比


4.数据解析细节

建议:

  • 使用xpath或者css selector替代正则
  • 为什么建议使用xpath代替正则?
    • 对于固定场景,合适的正则表达式解析的效率是会高于xpath的,之所以提倡使用xpath,是因为程序可维护性,xpath的可读性远高于正则表达式,开发调试和维护效率会大大提高。

果CMS作为优秀的内容管理系统,因其具备强大的采集功能,使客户可以轻松提取网络信息并展示。然而,在采集过程中,原创性尤须重视。文章将剖析利用该CMS进行采集时,如何实现伪原创,从而保持采集内容的独特性与高品质。

理解苹果CMS采集原理

成功实现伪原创的关键在于对苹果CMS采集原理有透彻了解。苹果CMS采集功能通过获取特定网页的HTML代码,抽取出诸如标题、正文等关键元素,接着按照用户预设规则进行相关处理,以生成最终的内容。为了实现伪原创,在处理阶段需添加一些元素,使采集所得内容具备一定程度的创新性。

实际运用中,可借助调整采集规范和添加处理组件等策略以实现伪原创效果。例如,可以选择性地对原文进行局部置换和添加关键字链接,进而使生成的文本更具新颖性。

修改采集规则

苹果CMS的采撷规则直接影响内容的构架及格式,适当调整其参数便能产生类似原创的结果。譬如,增加一定的随机置换规则至规则库内,使每次所采撷之内容皆异于前次,即便源头无二,所得之文亦呈现丰富多元,从而提升文章的原创度。

此外,利用调整采集规则如部署设定采集频率及挑选合适的采集源等方法可有效降低与其他网站发生的内容重复现象,进一步提高网站信息的独有特性。

使用内容处理插件

除了调整采集规则之外,通过运用苹果CMS丰富的插件库,可实现高质量的文章生成。使用者可按照自身需求选用适当插件并完成相应设置以满足不同需求。

运用诸如内容自动替换等插件,即可对采集信息作出相应处理,将特定词汇或语句转化为同义词或等价表达方式,进而提升内容的多样化;同时,借助关键词链接插件,能在采集内容中自动添加上相应关键词链接,大幅度增强内容的丰富程度与可读性。

结合人工编辑

虽然借助苹果CMS的自动采集与处理能力可在一定程度上实现伪原创效果,然而若期望获得更高原创性,仍需借助人工编辑的专业技能。通过对采集而来的素材加以精细化处理及润色,增加个人鲜明观点及魅力内容,从而使最终呈现出的文章更具特色和吸引力。

在人工编修过程中,遵循采集内容的主题与风格,适度调整以确保内容连贯性与一致性。另外,适量植入独特元素及表达手法,赋予文章更多个性与创意。

不断优化和调整

塑造伪原创并非一日之功,需持续优化与调整。实践中,用户可通过精细化管理采集规则及运用内容处理插件等手段,以满足自身及用户的需求偏好。

通过利用苹果CMS所提供的数据分析能力,我们能精准评估并分析演化出的内容,全面掌握用户的反馈及偏好,据此适时调整收集策略以及内容处理模式,以持续提高内容的品质与创新度。

面临的挑战与解决方案

在执行假拟原创的任务时,面临了一系列挑战与难题。例如,如何保证伪原创内容的自然流畅以及可阅读性;如何防止过度编辑造成的文章信息失实等等问题。

为了应对上述困难,高效可行之策略包括运用AI技术进行自然语言处理,确保内容的自然流畅与易读;此外,也应强化采编源头的筛选与评估机制,精选优质资源加以收集,从根本上保障内容品质及原创性。

总结

对苹果CMS采集与伪原创的研究表明,伪原创并非难事,只需掌握相应策略及技能便可胜任。关键在于了解采集机理,精确设置采集规则,利用内容处理插件,辅以人工编辑及持续改善,以提升文章质量与独特性。坚信在不久未来,我们将更易于创造出高品质的伪原创内容,以满足用户对于优质内容服务需求。

关于此议题,我邀请您参与思考:您如何看待伪原创对内容创新所产生的影响?期待您的宝贵意见!

coding=utf-8

import urllib2

import re

import os

#this function from internet @littlebai

#去掉特征字符串内的html操作符

def filter_tags(htmlstr):

re_cdata=re.compile('//<!\[CDATA\[[^>]*//\]\]>',re.I) #匹配CDATA

re_script=re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.I)#Script

re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I)#style

re_p=re.compile('<P\s*?/?>')#处理换行

re_h=re.compile('</?\w+[^>]*>')#HTML标签

re_comment=re.compile('<!--[^>]*-->')#HTML注释

s=re_cdata.sub('',htmlstr)#去掉CDATA

s=re_script.sub('',s) #去掉SCRIPT

s=re_style.sub('',s)#去掉style

s=re_p.sub('\r\n',s)#将<p>转换为换行

s=re_h.sub('',s) #去掉HTML 标签

s=re_comment.sub('',s)#去掉HTML注释

blank_line=re.compile('\n+')#去掉多余的空行

s=blank_line.sub('\n',s)

return s

#设置下载文件的保存位置

path = "E:\news.qq.com\a\20120506\"

#匹配url规则

rege = re.compile(r"/a/\d{8}/\d{6}.htm")

#从主页获得所有存在的url链接的后半部分并排序

urlcontent = urllib2.urlopen('http://news.qq.com/a/20120506/index.htm').read()

get_url = rege.findall(urlcontent)

get_url.sort()

#根据所获得的url数量建立循环遍历所有url链接

for i in xrange(0,len(get_url)):

get_url[i] = "http://news.qq.com"+get_url[i]#完整链接

#异常处理:部分url链接打开延时或者无法打开则跳过此次循环

try:#异常跳出

sub_web = urllib2.urlopen(get_url[i]).read()#打开完整url链接,获取内容

except urllib2.URLError, e:

print get_url[i][-10:-4]+' Failed'

continue

#下面开始内容操作

re_keyt = "<h1>.+</h1>"#获取标题,此处的标题不含腾讯新闻的后缀比较方便

title = re.findall(re_keyt,sub_web)#去掉标题左右的html标签

re_keyc = re.compile("<div id=\"Cnt-Main-Article-QQ\".*</P></div>\n</div>",re.DOTALL)#匹配正文内容的正则(个别页面无法获得,见if块)

content = re_keyc.findall(sub_web)#获得正文内容

#个别页面由于有视频或其他的无法匹配正文内容的正则表达式,所以无法获得内容,应给与过滤

if len(title)==0 or len(content)==0:

continue

re_content = filter_tags(title[0]+"\r\n"+content[0])#将标题和正文放到一起并去除html标签代码

w=file(path+get_url[i][-10:-4]+'.txt','w')#根据页面的文件名建立txt文件,并打开为写入方式

w.write(re_content)#写入获得的去除了html标签代码的标题和正文

w.close()#关闭文件

#命令行输出提示文件下载进度

print 'Completed the'+str(i+1)+" -Total "+str(len(get_url))+" THE "+get_url[i][-10:]

#完成所有url链接的下载

print "Fuck The Stupied Guy!!!!"

#退出脚本

exit()