先说一下大致的步骤. 首先需要模拟浏览器登录网站才能看到相应电影信息, 然后通过正则表达式从网页源代码中筛选出所需要的电影, 最后通过python-wordpress-xmlrpc将信息逐条发布到Wordpress. 以下是代码:

# coding: utf-8
import re
import requests
import datetime
import sys
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts # python默认ascii编码, 此处强制它为utf-8编码以实现中文输出
reload(sys)
sys.setdefaultencoding('utf8')
# 变量声明
today = str(datetime.date.today())[5:]
yesterday = str(datetime.date.today() + datetime.timedelta(days=-1))[5:]
login_url = "http://www.zimuzu.tv/User/Login/ajaxLogin"
today_url = "http://www.zimuzu.tv/today"
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"
}
payload = {
"account": "your_id",
"password": "your_pwd",
"remember": 0,
"url_back": "http://www.zimuzu.tv/"
}
# 登录网页,获取网页源代码
s = requests.session()
login_result = s.post(login_url, headers=head, data=payload)
r = s.get(today_url, headers=head)
# 正则表达式
regexp = r'''<tr\s.*?day="''' + yesterday + r'''".*?>\s+
<td\s.*?</td>\s+
<td\s.*?</td>\s+
<td><a\shref=".*?"\starget="_blank">(.*?)</a></td>\s+
<td\sclass="dr_ico">.*?(?:<a\shref="(magnet.*?)"[^>]+>(磁)</a>|<a\shref="(ed2k.*?)"[^>]+>(驴)</a>)?(?:<a\shref="(ed2k.*?)"[^>]+>(驴)</a>|<a\shref="(magnet.*?)"[^>]+>(磁)</a>).*?</td>\s+
<td>(.*?)</td>\s+
<td\s.*?</td>\s+
</tr>
'''
# 将元祖转化为列表, 为了替换"磁", "驴"
pattern = re.compile(regexp, re.M | re.X)
result = re.findall(pattern, r.content) # result = [().()...]
new_result = []
for item in result:
new_result.append(list(item)) # new_result = [[],[]...]
# 发布博客
client = Client('https://mvstarblog.wordpress.com/xmlrpc.php', 'your_id', 'your_pwd')
post = WordPressPost()
replacement = {'磁': '磁力下载链接: ', '驴': '电驴下载链接: '}
for item in new_result:
tr = [replacement[x] if x in replacement else x for x in item]
post.title = tr[0]
post.content = tr[6] + '\n' + tr[5] + '\n\n' + tr[2] + '\n' + tr[1]
post.id = client.call(posts.NewPost(post))
post.post_status = 'publish'
client.call(posts.EditPost(post.id, post))
print tr[0] + ' has been published'

2016-4-18更新正则表达式:

今天发现第一版的正则表达式对于下列文本会出现匹配结果的序列问题:

<tr class="list " channel="tv" area="美国" day="04-17" format="720P">
<td class="d1">美剧</td>
<td class="d2">720P</td>
<td><a href="/resource/28688" target="_blank">Banshee.S04E03.720p.HDTV.x264-KILLERS.mkv</a></td>
<td class="dr_ico"><a href="ed2k://|file|Banshee.S04E03.720p.HDTV.x264-KILLERS.mkv|1737182740|CF3E15B3C2D53BCA2ECA0AE1C8287091|h=2JMYLXADG7T2QP4W5ELF7Z3M75IMPC3D|/" target="_blank" class="l">驴</a><a oncontextmenu="ThunderNetwork_SetHref(this)" onclick="return OnDownloadClick_Simple(this,2,4);" href="thunder://QUFlZDJrOi8vfGZpbGV8QmFuc2hlZS5TMDRFMDMuNzIwcC5IRFRWLngyNjQtS0lMTEVSUy5ta3Z8MTczNzE4Mjc0MHxDRjNFMTVCM0MyRDUzQkNBMkVDQTBBRTFDODI4NzA5MXxoPTJKTVlMWEFERzdUMlFQNFc1RUxGN1ozTTc1SU1QQzNEfC9aWg==" thunderrestitle="Banshee.S04E03.720p.HDTV.x264-KILLERS.mkv" thundertype="" thunderpid="37361" thunderhref="thunder://QUFlZDJrOi8vfGZpbGV8QmFuc2hlZS5TMDRFMDMuNzIwcC5IRFRWLngyNjQtS0lMTEVSUy5ta3Z8MTczNzE4Mjc0MHxDRjNFMTVCM0MyRDUzQkNBMkVDQTBBRTFDODI4NzA5MXxoPTJKTVlMWEFERzdUMlFQNFc1RUxGN1ozTTc1SU1QQzNEfC9aWg==" class="x">迅</a><a class="m" xmhref="ed2k://|file|Banshee.S04E03.720p.HDTV.x264-KILLERS.mkv|1737182740|CF3E15B3C2D53BCA2ECA0AE1C8287091|h=2JMYLXADG7T2QP4W5ELF7Z3M75IMPC3D|/" rel="xiaomi" target="_blank">&nbsp;小米路由</a><a class="d" target="_blank" rel="yun">云播</a><a class="d" target="_blank" rel="xuan">旋播</a></td>
<td>1.62GB</td>
<td class="d6">22:14</td>
</tr>

结果如下:

1.	[210-251]	`Banshee.S04E03.720p.HDTV.x264-KILLERS.mkv`
4. [305-440] `ed2k://|file|Banshee.S04E03.720p.HDTV.x264-KILLERS.mkv|1737182740|CF3E15B3C2D53BCA2ECA0AE1C8287091|h=2JMYLXADG7T2QP4W5ELF7Z3M75IMPC3D|/`
5. [468-469] `驴`
10. [1418-1424] `1.62GB`
11. [1461-1466] `22:14`

这里的序列为1 4 5 10 11, 但我希望的序列应该是1 6 7 10 11, 所以我将代码改成如下:

<略>
regexp = r'''<tr\s.*?day="''' + yesterday + r'''".*?>\s+
<td\s.*?</td>\s+
<td\s.*?</td>\s+
<td><a\shref=".*?"\starget="_blank">(.*?)</a></td>\s+
<td\sclass="dr_ico">.*?(?:<a\shref="(magnet.*?)"[^>]+>(磁)</a>)?(?:<a\shref="(ed2k.*?)"[^>]+>(驴)</a>)?.*?</td>\s+
<td>(.*?)</td>\s+
<td\s.*?</td>\s+
</tr>
'''
<略>
post.content = tr[4] + '\n' + tr[3] + '\n\n' + tr[2] + '\n' + tr[1]
<略>

2016-4-26更新正则表达式匹配中文字符:

对于那些"生肉", 我就不抓了, 于是稍稍修改代码, 只抓取标题中有中文的剧集:

<略>
regexp = ur'''<tr\s.*?day="''' + yesterday + ur'''".*?>\s+
<td\s.*?</td>\s+
<td\s.*?</td>\s+
<td><a\shref=".*?"\starget="_blank">(.*?[\u4e00-\u9fa5]+.*?)</a></td>\s+
<td\sclass="dr_ico">.*?(?:<a\shref="(magnet.*?)"[^>]+>(磁)</a>|<a\shref="(ed2k.*?)"[^>]+>(驴)</a>)?(?:<a\shref="(ed2k.*?)"[^>]+>(驴)</a>|<a\shref="(magnet.*?)"[^>]+>(磁)</a>).*?</td>\s+
<td>(.*?)</td>\s+
<td\s.*?</td>\s+
</tr>
'''
<略>
result = re.findall(pattern, unicode(r.content))
<略>
replacement = {u'磁': u'磁力下载链接: ', u'驴': u'电驴下载链接: '}
<略>

2016-4-26更新源代码:

# coding: utf-8
import re
import requests
import datetime
import sys
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts # python默认ascii编码, 此处强制它为utf-8编码以实现中文输出
reload(sys)
sys.setdefaultencoding('utf8')
# 变量声明
today = str(datetime.date.today())[5:]
yesterday = str(datetime.date.today() + datetime.timedelta(days=-1))[5:]
current = datetime.datetime.now().strftime('%H:%M')
justnow = (datetime.datetime.now() - datetime.timedelta(hours=1)).strftime('%H:%M')
login_url = "http://www.zimuzu.tv/User/Login/ajaxLogin"
today_url = "http://www.zimuzu.tv/today"
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"
}
payload = {
"account": "your_id",
"password": "your_pwd",
"remember": 0,
"url_back": "http://www.zimuzu.tv/"
}
# 登录网页,获取网页源代码
s = requests.session()
login_result = s.post(login_url, headers=head, data=payload)
r = s.get(today_url, headers=head)
# 替换"磁", "驴"
r2 = r.content.replace(u'磁',u'磁力下载链接:').replace(u'驴', u'电驴下载链接:')
# 正则表达式
regexp = ur'''<tr\s.*?day="''' + yesterday + ur'''".*?>\s+
<td\s.*?</td>\s+
<td\s.*?</td>\s+
<td><a\shref=".*?"\starget="_blank">(.*?[\u4e00-\u9fa5]+.*?)</a></td>\s+
<td\sclass="dr_ico">.*?(?:<a\shref="(magnet.*?)"[^>]+>(磁力下载链接:)</a>)?(?:<a\shref="(ed2k.*?)"[^>]+>(电驴下载链接:)</a>)?.*?</td>\s+
<td>(.*?)</td>\s+
<td\s.*?</td>\s+
</tr>
'''
pattern = re.compile(regexp, re.M | re.X)
result = re.findall(pattern, unicode(r2))
# 发布博客
client = Client('https://mvstarblog.wordpress.com/xmlrpc.php', 'your_id', 'your_pwd')
post = WordPressPost()
for item in result:
post.title = item[0]
post.content = item[4] + '\n' + item[3] + '\n\n' + item[2] + '\n' + item[1]
post.id = client.call(posts.NewPost(post))
post.post_status = 'publish'
client.call(posts.EditPost(post.id, post))
print item[0] + ' has been published'

自动爬取ZiMuZu的内容发布到Wordpress的更多相关文章

  1. python网络爬虫之使用scrapy自动爬取多个网页

    前面介绍的scrapy爬虫只能爬取单个网页.如果我们想爬取多个网页.比如网上的小说该如何如何操作呢.比如下面的这样的结构.是小说的第一篇.可以点击返回目录还是下一页 对应的网页代码: 我们再看进入后面 ...

  2. php爬取微信文章内容

    php爬取微信文章内容 在做官网升级的时遇到新的需求,需要将公司公众号文章显示在官网的文章模块下.但存在的问题是:微信文章的链接会失效,并且需要对文章部分内容做修改,同时要减少微信运营人员的工作量,避 ...

  3. Crawlspider的自动爬取

    引子 : 如果想要爬取 糗事百科 的全栈数据的方法 ? 方法一 : 基于scrapy框架中的scrapy的递归爬取进行实现(requests模块递归回调parse方法) . 方法二 : 基于Crawl ...

  4. scrapy框架之CrawlSpider全站自动爬取

    全站数据爬取的方式 1.通过递归的方式进行深度和广度爬取全站数据,可参考相关博文(全站图片爬取),手动借助scrapy.Request模块发起请求. 2.对于一定规则网站的全站数据爬取,可以使用Cra ...

  5. 如何手动写一个Python脚本自动爬取Bilibili小视频

    如何手动写一个Python脚本自动爬取Bilibili小视频 国庆结束之余,某个不务正业的码农不好好干活,在B站瞎逛着,毕竟国庆嘛,还让不让人休息了诶-- 我身边的很多小伙伴们在朋友圈里面晒着出去游玩 ...

  6. scrapy爬取动态分页内容

    1.任务定义: 爬取某动态分页页面中所有子话题的内容. 所谓"动态分页":是指通过javascript(简称"js")点击实现翻页,很多时候翻页后的页面地址ur ...

  7. python实例:自动爬取豆瓣读书短评,分析短评内容

    思路: 1.打开书本“更多”短评,复制链接 2.脚本分析链接,通过获取短评数,计算出页码数 3.通过页码数,循环爬取当页短评 4.短评写入到txt文本 5.读取txt文本,处理文本,输出出现频率最高的 ...

  8. 精通python网络爬虫之自动爬取网页的爬虫 代码记录

    items的编写 # -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentati ...

  9. 利用python的requests和BeautifulSoup库爬取小说网站内容

    1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...

随机推荐

  1. iOS为真机调试增加scribble来定位野指针

    尽管在ARC中,野指针出现的频率已经大大降低了,但是仍然会有野指针困扰着我们. 在模拟器调试中,我们可以开启scribble或者zombieObject来将已经释放的内存填充无意义的内容,能够将一些非 ...

  2. css中为了清除浮动经常用到的after样式

    .cf:after { display: block; visibility: hidden; width:; height:; line-height:; font-size:; clear: bo ...

  3. centos 安装redis(一台机器可以安装多个redis)

    我在运行时redis版本是2.8 操作前设置以管理员身份: 打开终端输入 su - 安装redis需要确保系统已经安装了(gcc gcc-c++)# yum -y install gcc gcc-c+ ...

  4. sublime3侧边栏颜色修改,推荐主题

    sublime侧边栏的颜色默认是灰白色的,下面方法可以手动定制颜色为深色: 需要修改的文件为: C:\program\Sublime\Packages\Theme - Default.sublime- ...

  5. “连接配置中心失败,将无法进行正常管理”--腾讯通RTX管理器

    [故障现象]: 腾讯通RTX管理器提示“连接配置中心失败,将无法进行正常管理” [解决办法]: 在系统服务中启动“RTX_ConfigCenter”服务即可. 文章收集自网络

  6. 51nod1073(约瑟夫环)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1073 题意: 中文题诶~ 思路: 直接模拟的话O(n*k)的 ...

  7. 去掉input框点击时的默认颜色

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  8. Sql Server 中锁的概念

    锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 脏 ...

  9. cryptkeeper的使用

    转自:http://www.linuxidc.com/Linux/2011-06/37070.htm Cryptkeeper 是加密文件系统 EncFS 的前端工具,以 Gnome Applet 方式 ...

  10. 【MongoDB】 Windows 安装

    Windows下安装MongoDB,虽然网上有很多攻略,但是还是有很多坑,为了以后少犯错误,特此记录. 1.下载安装包 https://fastdl.mongodb.org/win32/mongodb ...