爬取糗事百科段子内容、热图、视频
1、以追加的方式保存段子内容到doc文件中
2、保存图片、视频到指定路径
3、获取窗口句柄、切换页面窗口、返回页面窗口
4、获取标签属性值
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : Lan.lei
from selenium import webdriver
import time
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
class Qiushi:
#爬取段子信息并保存到文件中
def duanzi(self,driver):
#点击段子
driver.get('https://www.qiushibaike.com/text/')
time.sleep(2)
m=0
# 以追加的方式打开文件
file = open('D:/test.doc', 'a')
# 写入前先清空文件内容
file.truncate()
while m<25:
#获取段子作者
author=driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div["+str(m+1)+"]/div[1]/a[2]/h2").text
#获取段子内容
content=driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div["+str(m+1)+"]/a[1]/div/span").text
#获取当前句柄
currentWindow=driver.current_window_handle
#检查是否有查看全文按钮
try:
driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div[" + str(m + 1) + "]/a[1]/div/span[2]").click()
time.sleep(2)
#获取所有的窗口句柄
all_handles=driver.window_handles
#切换到新页面
#driver.switch_to_window(all_handles[-1]) ---也可切换到新页面
driver.switch_to_window(all_handles[1])
#获取新的句柄
newWindow = driver.current_window_handle
#获取段子所有内容
content=driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div[2]/div[1]/div").text
# 再切换到原来的页面
if newWindow!=currentWindow:
driver.switch_to_window(currentWindow)
except:
pass
#拼接作者和段子内容,同时去掉头尾的空格,加换行
duanziInfo="第"+str(m+1)+"个段子---"+author.strip()+":"+content.strip()+"\n"
#将内容写入文件
file.write(duanziInfo)
print duanziInfo
m=m+1
file.close()
#获取热图并将图片下载到本地
def get_picture(self,driver):
#点击热图
driver.get('https://www.qiushibaike.com/imgrank/')
#每页展示了25张图片
m=0
while m<25:
try:
#获取图片作者
author=driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div["+str(m+1)+"]/div[1]/a[2]/h2").text
#获取图片链接,get_attribute('src')获取img标签中src的属性值
img_src=driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div["+str(m+1)+"]/div[2]/a/img").get_attribute('src')
#通过requests请求获取图片
img=requests.get(img_src).content
# 定义图片路径和名称
fileName = 'D:/test/' + author + '.jpg'
file = open(fileName, 'wb')
#保存图片
file.write(img)
file.close()
time.sleep(1)
print "第"+str(m+1)+"张图片地址----"+author+":"+img_src
except:
print u"爬取第"+str(m+1)+"张图片失败"
m=m+1
#爬取视频并保存到本地
def get_video(self,driver):
#点击视频链接
driver.get('https://www.qiushibaike.com/video/')
m=0
while m<20:
try:
#获取作者
author=driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div["+str(m+1)+"]/div[1]/a[2]/h2").text
#获取视频链接
videoPath=driver.find_element_by_xpath("//*[@id='content']/div/div[2]/div["+str(m+1)+"]/video/source").get_attribute("src")
#获取视频
video=requests.get(videoPath).content
#定义视频保存路径
fileName='d:/test/'+author+'.mp4'
file=open(fileName,'wb')
file.write(video)
file.close()
print author+':'+videoPath
except:
print u"爬取第"+str(m+1)+"个视频失败"
m=m+1
if __name__=='__main__':
driver = webdriver.Chrome()
driver.maximize_window()
q=Qiushi()
# q.duanzi(driver)
q.get_picture(driver)
# q.get_video(driver)
driver.quit()