本帖最后由 阿蛮的开心姐 于 2018-10-24 15:08 编辑
新浪微博现在是各个行业语料库中一个很重要的获取点,这篇文章就给大家介绍一种使用Python和Selenium爬取自定义的新浪微博语料。这种方式使用方法简单,但是速度比较慢,希望可以对你有所帮助。
(1)Login Weibo 登陆微博 登陆微博是因为,新浪微博很多数据如果没有登录是不能获取或者访问的,当点击下一页、个人详细信息等的超链接就会跳转到登录界面,这也是开发者对平台的保护措施。但是同时,每个公司都会提供API接口让开发者进行操作,但是本次我们操作是使用selenium模拟浏览器进行爬取的。 函数login weibo(username, password) 实现,随后就会自动打开浏览器并且输入用户名和密码,同时在登录的过程中会涉及到验证码,所以建议大家暂停十五秒到二十秒,手动输入验证码后等时间到了就会自动点击登录。这一步的核心代码如下: driver.get("http://login.weibo.cn/login/") elem_user = driver.find_element_by_name("mobile") elem_user.send_keys(username) #用户名 elem_pwd = driver.find_element_by_xpath("/html/body/div[2]/form/div/input[2]") elem_pwd.send_keys(password) #密码 elem_sub = driver.find_element_by_name("submit") elem_sub.click() #点击登陆
登陆过程中也可称出现报错:WebDriverException: Message: "Can't load the profile. Profile Dir: 这个可能是使用的Selenium、Python、Firefox版本不一致导致的。
登录成功后会保存Cookies或Session信息,这时候就可以跳转访问了,否则就会出现重新跳转会登录界面。这里使用Selenium的driver.get(url)实现跳转。 完整源码。
(2)VisitPersonPage(user_id) 访问跟人网站,获取个人信息 很多网站设计都是 URL+用户名ID的访问链接,比如新浪微博中柳岩的链接: http://weibo.cn/guangxianliuyan 所以我们定义一个TXT文件列表包含所有用户的ID信息,然后依次通过读取文件来爬取信息,核心代码: user_id = inforead.readline() while user_id!="": user_id = user_id.rstrip('\r\n') VisitPersonPage(user_id) #访问个人页面 user_id = inforead.readline()
这样其中的用户ID列表就会在我们定义的SinaWeibo_List.txt 中了,效果如图: 我们可以通过分析HTML源码,获取节点位置,然后通过Selenium函数定义位置获取信息,最后再通过正则表达式或字符串处理获取我们想要的值。 如获取昵称: str_name = driver.find_element_by_xpath("//div[@class='ut']") #空格分隔 获取第一个值 "Eastmount 详细资料 设置 新手区" str_t = str_name.text.split(" ") num_name = str_t[0] print u'昵称: ' + num_name 再如括号之间数字内容: #微博[294] 关注[351] 粉丝[294] 分组[1] @他的 str_gz = driver.find_element_by_xpath("//div[@class='tip2']/a[1]") guid = re.findall(pattern, str_gz.text, re.M) num_gz = int(guid[0]) print u'关注数: ' + str(num_gz)
|