美文网首页我爱编程
利用selenium和PhantomJS爬取优酷视频动态最新评论

利用selenium和PhantomJS爬取优酷视频动态最新评论

作者: 蜗牛仔 | 来源:发表于2016-11-21 17:35 被阅读540次

目前正在学python爬虫,在网易上了很多课程,静态网页爬了许多,现在在极客学院学爬取动态网页数据,第一次用selenium,折腾好好几天,这里分享一下第一次独立实战(当然过程中百度以及看简友的心德无数次了),让各位同志以后别走我踩过的坑,以下是代码,我都做了清晰的注释

from selenium import webdriver
import re

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import  time


import os


all_comments=[]先建一个空列表,用于接受爬取的文字


driver = webdriver.PhantomJS()这里我之前用的是chrome,调试好了换成了PhantomJs,速度快了一点
如果用chrome,要把下载的chromedriver.exe放在python的文件路径下,
如图,放好就可以直接用,我的chrome是最新版本的,没问题,没用网上说的旧版本,



YIJMB7X~{D8G~JA2_ZS32{O.png

driver.get('http://v.youku.com/v_show/id_XMTgxODg5NzM0MA==.htm')调用get方法,
进入网页
driver.execute_script("window.scrollBy(0,3000)")这是下拉操作,进入网页后会自己滚动到页面下面,
这样评论才能加载出来
time.sleep(3)python也挺累,还是让他休息一下吧
driver.execute_script("window.scrollBy(0,5000)")具体下拉多少,要看自己的屏幕吧这个
time.sleep(3)

data= driver.find_element_by_class_name('comments')
这里搞了我很久,一直找不到评论的所在,查了很久文档,对先抓大后抓先深感为然,
不然你直接匹配评论内容是找不到的,这个是先匹配到最新评论的div,
找到所有评论的框架先,这样动态数据才能加载出来,如图,所有最新评论都在一个class=commens的div中,
为了剔除第一页的最热评论,又折腾了好久...
Paste_Image.png

time.sleep(3)
we_data=driver.page_source这句话一定要有,不然第一页的评论就抓不出来,因为要抓多页,
所以要给第一页抓到的页面赋一个变量

tr1 = r'<div class="comments".*</div>'此正则找到最新评论所在的区域,别问为啥还要再找一次,
刚刚不是用find_element找了一次吗,其实我也希望大神告诉我,上面那句为何那么关键......

tr2 = r'<p id="content_\d\d\d\d\d\d\d\d\d\d">(.*?)<br'此正则匹配最新评论的文字内容
comments1 = str(re.findall(tr1,we_data,re.S))#先转化为字符串,不然下面的正则用不了,
,这样就找到最新的评论所在的div,再用正则一条一条匹配就好了

comments2 = re.findall(tr2,comments1, re.S)匹配div里面评论的文字内容

print(comments2)
all_comments.extend(comments2)把找到的内容添加进去
# print(len(chinese2))
#
# for each in chinese2:
#     print(each)

接下来就简单了,重复这个步骤就好了,不然要添加一句click(),
就是让selenium模拟人工点击第二页,然后复制以上步骤抓取第二页评论就好了


time.sleep(2)
driver.find_element_by_xpath('//*[@id="qPager_2"]/ul[2]/li[2]/a').click()
这个xpath我是直接在浏览器复制的,亲测可用
time.sleep(2)
driver.execute_script("window.scrollBy(0,2000)")
time.sleep(3)
driver.execute_script("window.scrollBy(0,4000)")
time.sleep(3)
data2= driver.find_element_by_class_name('comments')
#print(driver.page_source)
we_data=driver.page_source

tr1 = r'<div class="comments".*</div>'

tr2 = r'<p id="content_\d\d\d\d\d\d\d\d\d\d">(.*?)<br'
comments1 = str(re.findall(tr1,we_data,re.S))

comments2 = re.findall(tr2,comments1, re.S)

print(comments2)#这样就抓到第二页评论了,第三第四同理,这里不做研究了

all_comments.extend(comments2)
print(all_comments)
with open('优酷网锦绣未央评论.txt', 'w', encoding='utf-8') as f:
    for content in all_comments:
        f.write(str(content).replace('\\n',''))#里面很多换行符,要做数据清理
        f.write('\n')#每写入一条评论间隔一行

如图是各个comments的输出
driver.quit()
Paste_Image.png

爬取的结果如图所示

Paste_Image.png

里面一些评论有链接的,应该是某某回复谁谁的,这个坑以后再填吧,现在的功力不行啊,哪位大神会的也可以指点一下我,有点累,那个字符串后面的\xa0还没清理,不过应该也不难,最后感谢一下
简友韩大熊宝要姓张,最后又什么问题可以联系我啊,QQ810833835,目前正在努力学pyhthon爬虫,打算转行,路漫漫其修远兮啊

相关文章

网友评论

    本文标题:利用selenium和PhantomJS爬取优酷视频动态最新评论

    本文链接:https://www.haomeiwen.com/subject/kymupttx.html