该爬虫的完整代码我把它放到了GitHub上,因为目前是在一点点的增加功能阶段,所以代码可能没有完善好,但是正常运行时没有问题的,欢迎拍砖,:)
GitHub:点击打开链接
该爬虫主要是通过requests来实现的,该模块完全可以很好的代替urllib和urllib2,而且功能更强大,详细可以看这里。同时也用到了pillow模块中的image对象,实现环境是Python2,不过在Python3上只需很小的改动就可以正常运行,等后续代码功能完善好后,我会把Python3的实现也整理一份出来放在GitHub上。
首先通过cookie模拟登陆到知乎,然后获取知乎某一个问题的链接,打开并获取该问题回答下的图片,然后保存到本地。我们先看下知乎中的网页html文本,
对于某一个用户的回答是这样的:红色方框中的标签是回答的具体内容标签
然后原始图片是在下面这个标签里,包含在上图红色方框的标签下:
我们在写正则表达式的时候只需匹配到这个标签,然后取出里面的url就可以了。具体的正则表达式如下,分为两部分,首先取出”zm-editable-content.."标签里的全部内容,然后在从中取出"data-actualsrc"的内容:
pattern = re.compile('<a class="author-link".*?<span title=.*?<div class="zh-summary.*?' +
'<div class="zm-editable-content.*?>(.*?)</div>', re.S)
pattern = re.compile('data-actualsrc="(.*?)">', re.S)
然后我们通过模拟登陆到知乎,具体的模拟登陆解释可以看这里。
# -*-coding:utf-8 -*-
import requests
from requests.adapters import HTTPAdapter
# import urllib
# import urllib2
import cookielib
import re
import time
import os.path
from PIL import Image
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5)'
headers = {'User-Agent': user_agent}
session = requests.session()
session.cookies = cookielib.LWPCookieJar(filename='cookies')
try:
session.cookies.load(ignore_discard=True)
except:
print "Cookie 未能加载"
def get_xsrf():
'''_xsrf 是一个动态变化的参数'''
index_url = "http://www.zhihu.com"
index_page = session.get(index_url, headers=headers)
html = index_page.text
pattern = r'name="_xsrf" value="(.*?)"'
_xsrf = re.findall(pattern, html)
return _xsrf[0]
def get_captcha():
t = str(int(time.time() * 1000))
captch