天天看點

自動爬取ZiMuZu的内容釋出到Wordpress自動爬取ZiMuZu的内容釋出到Wordpress

自動爬取ZiMuZu的内容釋出到Wordpress

先說一下大緻的步驟. 首先需要模拟浏覽器登入網站才能看到相應電影資訊, 然後通過正規表達式從網頁源代碼中篩選出所需要的電影, 最後通過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:]
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=".*?" target="_blank" rel="external nofollow" \starget="_blank">(.*?[\u4e00-\u9fa5]+.*?)</a></td>\s+
<td\sclass="dr_ico">.*?(?:<a\shref="(magnet.*?)" target="_blank" rel="external nofollow" [^>]+>(磁力下載下傳連結:)</a>)?(?:<a\shref="(ed2k.*?)" target="_blank" rel="external nofollow" [^>]+>(電驢下載下傳連結:)</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'
           

繼續閱讀