Python+Selenium实现微博自动化爬虫
来源:互联网 发布:淘宝争议处理规范2016 编辑:程序博客网 时间:2024/05/16 10:08
目的:
利用python和selenium实现自动化爬虫
所需工具:
1、python2.7
2、selenium库(pip install selenium或者easy_install selenium进行安装)
3、火狐浏览器
安装好上述工具之后就可以开始微博爬虫啦!
首先,打开你的python编辑器(本人使用的是sublime3),设置一下编码格式如下:
# -*- coding:utf-8 -*-
然后导入所需要的库:
from
selenium
import
webdriver
from
selenium.webdriver.common.keys
import
Keys
from
selenium.webdriver.common.action_chains
import
ActionChains
import
time
利用如下代码,自动打开你的火狐浏览器并跳转到微博登录首页:
driver
=
webdriver.Firefox()
time.sleep(
3
)
driver.get(
"http://weibo.com"
)
其中的time.sleep是让程序等候3秒后再接着运行,为了避免因为网速的影响而导致页面信息抓取错误。运行这段代码之后,就会发现你的浏览器已经跳转到微博登录首页了,这个时候需要让浏览器实现自动点击账号登录并输入账号和密码。代码如下:
left
=
driver.find_element_by_xpath(
".//*[@id='pl_login_form']/div[2]/div[1]/div/a[2]"
)
ActionChains(driver).double_click(left).perform()
time.sleep(
3
)
# 在账号输入框输入内容
driver.find_element_by_id(
"loginname"
).send_keys(
"***"
)
# 在*处输入账号信息
# 在密码输入框输入密码
driver.find_element_by_name(
"password"
).send_keys(
"***"
)
# 在*处输入密码信息
# 向密码框发送命令,按下回车键
driver.find_element_by_name(
"password"
).send_keys(Keys.ENTER)
运行上述代码之后,就会发现你已经自动登录微博了,然后需要跳转到你所要爬取微博内容所在的页面:
# 跳转url到指定页面
driver.get(
"http://weibo.com/btvertaishidai?is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page=2#feedtop"
)
然后就可以开始爬取你想要的信息啦,本人所要爬取的内容有微博的粉丝数量、每条微博的内容(包括点赞数、转发数、回复数)。因为这个页面需要拖动滑动条到网页最下面才能完全显示所有信息,所以在爬取内容之前应该先将滑动条拖到最下方,代码如下:
js
=
"var q=document.documentElement.scrollTop=30000"
for
i
in
range
(
3
):
driver.execute_script(js)
time.sleep(
1
)
运行上面的所有代码之后,就可以开始爬取内容了。
# 获取粉丝量
L_1
=
driver.find_element_by_xpath(
".//*[@id='Pl_Core_T8CustomTriColumn__3']/div/div/div/table/tbody/tr/td[2]/strong"
).text
data_text
=
[]
# 保存微博内容
data_time
=
[]
# 保存发布微博的时间
data_relay
=
[]
# 转发量
data_comment
=
[]
# 评论量
data_support
=
[]
# 支持量
for
i
in
range
(
2
,
50
):
try
:
text
=
driver.find_element_by_xpath(
"//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[1]/div[3]/div[3]"
%
i).text
Time
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[1]/div[3]/div[2]/a[1]"
%
i).text
relay
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[2]/div/ul/li[2]/a/span/span/span/em[2]"
%
i).text
comment
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[2]/div/ul/li[3]/a/span/span/span/em[2]"
%
i).text
support
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[2]/div/ul/li[4]/a/span/span/span/em"
%
i).text
if
text:
data_text.append(text)
data_time.append(Time)
data_relay.append(relay)
data_comment.append(comment)
data_support.append(support)
else
:
pass
except
:
break
上面的代码中,对于要爬取的信息并没有采用正则去匹配,而是采用Xpath(比Xpath更为精准定位的是css定位),对于Xpath不懂的可以百度一下。
运行完上面所有代码之后,这一页所要爬的内容就以及全部爬下来并分别保存在L_1(粉丝数量)、data_text(微博内容)、data_time(微博发布的时间)、data_relay(微博内容转发数量)、data_comment(微博内容评论数量)、data_support(微博内容点赞数量),最后你就可以利用pandas将这些数据保存在csv中。
上面的代码只是爬取了一个页面的所需内容,要是想爬取多个页面,稍微修改一下代码就可以了。如果有什么不明白的,可以给文章后面的邮箱发邮件。
全部代码如下:
from
selenium
import
webdriver
from
selenium.webdriver.common.keys
import
Keys
from
selenium.webdriver.common.action_chains
import
ActionChains
import
time
driver
=
webdriver.Firefox()
time.sleep(
3
)
driver.get(
"http://weibo.com"
)
time.sleep(
5
)
left
=
driver.find_element_by_xpath(
".//*[@id='pl_login_form']/div[2]/div[1]/div/a[2]"
)
ActionChains(driver).double_click(left).perform()
time.sleep(
3
)
# 在账号输入框输入内容
driver.find_element_by_id(
"loginname"
).send_keys(
"***"
)
# 在密码输入框输入密码
driver.find_element_by_name(
"password"
).send_keys(
"***"
)
# 向密码框发送命令,按下回车键
driver.find_element_by_name(
"password"
).send_keys(Keys.ENTER)
time.sleep(
3
)
# 跳转url到指定页面
driver.get(
"http://weibo.com/btvertaishidai?is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page=2#feedtop"
)
time.sleep(
3
)
# 获取粉丝量
L_1
=
driver.find_element_by_xpath(
".//*[@id='Pl_Core_T8CustomTriColumn__3']/div/div/div/table/tbody/tr/td[2]/strong"
).text
data_text
=
[]
# 保存微博内容
data_time
=
[]
# 保存发布微博的时间
data_relay
=
[]
# 转发量
data_comment
=
[]
# 评论量
data_support
=
[]
# 支持量
# 拖动滚动条到最下方
js
=
"var q=document.documentElement.scrollTop=30000"
for
i
in
range
(
3
):
driver.execute_script(js)
time.sleep(
1
)
# 开始爬取该页面所有微博内容以及相关信息
for
i
in
range
(
2
,
50
):
try
:
text
=
driver.find_element_by_xpath(
"//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[1]/div[3]/div[3]"
%
i).text
Time
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[1]/div[3]/div[2]/a[1]"
%
i).text
relay
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[2]/div/ul/li[2]/a/span/span/span/em[2]"
%
i).text
comment
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[2]/div/ul/li[3]/a/span/span/span/em[2]"
%
i).text
support
=
driver.find_element_by_xpath(
".//*[@id='Pl_Official_MyProfileFeed__28']/div/div[%d]/div[2]/div/ul/li[4]/a/span/span/span/em"
%
i).text
if
text:
data_text.append(text)
data_time.append(Time)
data_relay.append(relay)
data_comment.append(comment)
data_support.append(support)
else
:
pass
except
:
break
- Python+Selenium实现微博自动化爬虫
- selenium phantomjs 实现新浪微博爬虫
- Python爬虫工具 Selenium webdriver -自动化测试工具
- python selenium自动化测试之牛刀小试——爬虫
- selenium+python—实现基本自动化测试
- python +selenium 实现教学质量评价自动化
- python+selenium+phantomjs实现爬虫功能
- selenium爬虫and自动化测试
- python + selenium 自动化测试
- selenium + python 自动化测试
- Python+selenium 自动化环境
- Python自动化测试-Selenium
- selenium + python 自动化测试
- Python selenium爬虫
- python+scrapy+selenium爬虫
- Python + Selenium 爬虫小记
- phantomjs+selenium+python爬虫
- python爬虫step1:selenium
- C\C++中iterator与const_iterator及const iterator区别
- TortoiseSVN中分支和合并实践
- 生辰
- js总结
- 数据泵expdp导出时间很长,导出速度很慢
- Python+Selenium实现微博自动化爬虫
- 剑指offer(动态规划-LeetCode72)
- 如何写出高效C++(构造/析构/赋值运算)
- BOM操作
- 03.运算符
- Touchable系列组件
- 【代码笔记】iOS-字体抖动动画
- sersync2实时同步
- 在win7(32位)系统上装ubuntu(64位)虚拟机,提示二进制长模式不兼容