爬虫专题python爬虫日记本python爬虫

知乎问题答案图片爬虫(三)

2017-08-15  本文已影响77人  江山斜睨

登录成功以后就是要调用知乎的链接地址获取数据了,定义如下函数从问题ID中保存图片。apiUrl中有三个参数需要上传,offset用来分页,limit是每页的答案数量,sort_by用default好了。

def saveImagesFromQuestionId(questionId, filePath):

baseQuestionUrl ='https://www.zhihu.com/question/'+str(questionId)+'/answer/'

apiUrl ='https://www.zhihu.com/api/v4/questions/'+str(questionId)\

+'/answers?offset=0&limit=20&sort_by=default'

whileTrue:

pageCode = getPageCode(apiUrl)

if notpageCode:

print"打开网页链接失败.."

returnNone

pageCodeJson = json.loads(pageCode)

if notpageCodeJson['data']:

break

foriinpageCodeJson['data']:

answerId = i['id']

answerUrl = baseQuestionUrl +str(answerId)

saveImagesFromUrl(answerUrl, filePath)

apiUrl = pageCodeJson['paging']['next']
函数getPageCode的作用是获取一个URL地址的内容,apiUrl返回的内容为Json格式,因此对其用json.load进行解析。

标签data里存放了具体的数据,也就是我们想要的问题的答案列表,我们根据id再从知乎上获取具体的答案内容,然后用saveImagesFromUrl函数抓取其中的图片

defsaveImagesFromUrl(pageUrl, filePath):

imagesUrl = getImageUrlFirstPage(pageUrl)

if notimagesUrl:

print'imagesUrl is empty'

return

if notos.path.exists(filePath):

os.makedirs(filePath)

write2File(imagesUrl, filePath)

这样就完成了根据一个问题ID抓取其对应的所有答案的图片的小爬虫啦。

下一步打算继续对爬虫进行改进,使用多线程的策略保存图片,可以大大提升性能。

上一篇下一篇

猜你喜欢

热点阅读