Selenium简介与安装
Selenium是什么?
Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。
安装
直接使用pip命令安装即可!
1
|
pip install selenium
|
Python抓取微博有两种方式,一是通过selenium自动登录后从页面直接爬取,二是通过api。
这里采用selenium的方式。
程序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
from selenium import webdriver
import time
import re
#全局变量
driver = webdriver.Chrome( "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" )
def loginWeibo(username, password):
driver.get( 'https://passport.weibo.cn/signin/login' )
time.sleep( 1 )
driver.find_element_by_id( "loginName" ).send_keys( "haishu_zheng@163.com" )
driver.find_element_by_id( "loginPassword" ).send_keys( "Weibo01061122" )
time.sleep( 1 )
driver.find_element_by_id( "loginAction" ).click()
#driver.close()
def visitUserPage(userId):
driver.get( 'http://weibo.cn/' + userId)
print ( '********************' )
print ( '用户资料' )
# 1.用户id
print ( '用户id:' + userId)
# 2.用户昵称
strName = driver.find_element_by_xpath( "//div[@class='ut']" )
strlist = strName.text.split( ' ' )
nickname = strlist[ 0 ]
print ( '昵称:' + nickname)
# 3.微博数、粉丝数、关注数
strCnt = driver.find_element_by_xpath( "//div[@class='tip2']" )
pattern = r "\d+\.?\d*" # 匹配数字,包含整数和小数
cntArr = re.findall(pattern, strCnt.text)
print (strCnt.text)
print ( "微博数:" + str (cntArr[ 0 ]))
print ( "关注数:" + str (cntArr[ 1 ]))
print ( "粉丝数:" + str (cntArr[ 2 ]))
print ( '\n********************' )
# 4.将用户信息写到文件里
with open ( "weibo.txt" , "w" , encoding = "gb18030" ) as file :
file .write( "用户ID:" + userId + '\r\n' )
file .write( "昵称:" + nickname + '\r\n' )
file .write( "微博数:" + str (cntArr[ 0 ]) + '\r\n' )
file .write( "关注数:" + str (cntArr[ 1 ]) + '\r\n' )
file .write( "粉丝数:" + str (cntArr[ 2 ]) + '\r\n' )
# 5.获取微博内容
# http://weibo.cn/ + userId + ? filter=0&page=1
# filter为0表示全部,为1表示原创
print ( "微博内容" )
pageList = driver.find_element_by_xpath( "//div[@class='pa']" )
print (pageList.text)
pattern = r "\d+\d*" # 匹配数字,只包含整数
pageArr = re.findall(pattern, pageList.text)
totalPages = pageArr[ 1 ] # 总共有多少页微博
print (totalPages)
pageNum = 1 # 第几页
numInCurPage = 1 # 当前页的第几条微博内容
contentPath = "//div[@class='c'][{0}]"
while (pageNum < = 3 ):
#while(pageNum <= int(totalPages)):
contentUrl = "http://weibo.cn/" + userId + "?filter=0&page=" + str (pageNum)
driver.get(contentUrl)
content = driver.find_element_by_xpath(contentPath. format (numInCurPage)).text
# print("\n" + content) # 微博内容,包含原创和转发
if "设置:皮肤.图片.条数.隐私" not in content:
numInCurPage + = 1
with open ( "weibo.txt" , "a" , encoding = "gb18030" ) as file :
file .write( "\r\n" + "\r\n" + content) # 将微博内容逐条写到weibo.txt中
else :
pageNum + = 1 # 抓取新一页的内容
numInCurPage = 1 # 每一页都是从第1条开始抓
if __name__ = = '__main__' :
username = 'haishu_zheng@163.com' # 输入微博账号
password = 'Weibo01061122' # 输入密码
loginWeibo(username, password) # 要先登录,否则抓取不了微博内容
time.sleep( 3 )
uid = 'xywyw' # 寻医问药
visitUserPage(uid)
|
运行结果:
同时还生成了weibo.txt文件,内容如下
这种方法有个缺陷,就是爬取较多内容会被封IP:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.jianshu.com/p/bc681b05312f