python自动生成采集规则_python 织梦自动采集更新脚本

上次分享过一个自动采集入库的脚本(phpcms的),有童鞋建议改为表单提交形式,毕竟数据库入库代码改动成本比较高,而通过表单post数据只 需改下cookie和频道id就可以运行起来。所以,这次主要利用pycurl模块和fiddler抓包工具演示下dedecms是如何提交数据的。

尝试过dedecms post数据的童鞋可能已经发现,织梦post的数据跟一般数据有些不同,dedecms post数据格式是multipart,利用抓包工具你会发现这样一串东西:Content-Type: multipart/form-data; boundary=---------------------------249724317605,如:

那么具体该如何提交呢?主要有两点(post地址、cookie、频道id之类的问题自己解决):

1,headers增加Content-Type: multipart/form-data,如下图:

2,通过fiddler把提交的数据下载到本地(点击下图红框另存到到本地,编码不需更改),命名为data.txt.

data = open('data.txt').read(),data直接作为post表单的数据即可。

实际上到此为止,你已经能够成功提交了,是不是很简单。

实际使用中,我们总不能把要更新的文章标题和内容写到txt里,如何把title、content等变成变量?一行代码即可搞定:

data = data.replace('title@123456',title).replace('content@123456',content)

只要把data.txt文章标题的文字改为'title@123456',内容改为'content@123456',然后把他们替换掉即可。下面是完整代码地址:

# coding:utf-8

import pycurl,StringIO

import sys

reload(sys)

sys.setdefaultencoding('utf8')

headers = [

"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36",

"Cookie:PHPSESSID=a8p9lr4jksj5kh9k3nhjaa5pu7; DedeUserID=1; DedeUserID__ckMd5=0023ecbe319d14d9; DedeLoginTime=1470919547; DedeLoginTime__ckMd5=b05a3b1e5c4bce22",

"Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryS1tN0Ueh3In2YSN8",

]

def curl(url):

c = pycurl.Curl()

c.setopt(pycurl.REFERER, 'http://yourdomain.com/dede/article_add.php?channelid=1')

c.setopt(pycurl.FOLLOWLOCATION, True)

c.setopt(pycurl.MAXREDIRS,5)

c.setopt(pycurl.CONNECTTIMEOUT, 60)

c.setopt(pycurl.TIMEOUT,120)

c.setopt(pycurl.ENCODING, 'gzip,deflate')

# c.setopt(c.PROXY,ip)

c.fp = StringIO.StringIO()

c.setopt(pycurl.URL, url)

c.setopt(pycurl.HTTPHEADER,headers)

c.setopt(pycurl.POST, 1)

c.setopt(pycurl.POSTFIELDS, data)

c.setopt(c.WRITEFUNCTION, c.fp.write)

c.perform()

code = c.getinfo(c.HTTP_CODE)#返回状态码

html = c.fp.getvalue()#返回源代码

return html

title = 'ITSEO培训怎么样'.encode('gbk','ignore')

content = 'TSEO讲师 多年excel实战经验任职某通讯公司seo岗位,长期接触各类... 关注 私信 夜息 ITSEO创始人 ITSEO创始人,原途牛seo负责人。SEO顾问服务过多个行...'.encode('gbk','ignore')

data = open('data.txt').read()

data = data.replace('title@123456',title).replace('content@123456',content)

print curl('http://yourdomain.com/dede/article_add.php')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值