利用有界面游览器爬取人民网微博(火狐)

本来今天应该写的是phantomjs+selenium实现无界面的爬取信息,但是对于这个phantomjs有点不入门,所以今天就简单的说一下selenium。

单单对于selenium来说,安装上没有说的,就用pip进行安装就行(pip install selenium)。安装好了之后我们就开始探索抓取的方法了。首先我们来运行一个小的程序:

from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.baidu.com/')
运行这三行代码就可以打开火狐游览器中的百度界面。如果你发现程序出错了,那就看一下有没有把游览器放到环境变量中.其实还可以下载一个小程序,就可以解决这个问题

链接:https://pan.baidu.com/s/1o8ywUq2 密码:to4h

下一步就是模拟提交,也就是在建的网页中进行提交,

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
print driver.page_source

上面的大部分懂了,然后就是对任务进行编辑:

首先我们要有一个逻辑,第一实现网页的创建和对人民网微博的登录;第二就是在登陆进去以后实现微博的翻页;第三步就是把每一个微博的评论找到实现微博和评论的爬取。

明白以后我们先看微博的登录:

#coding=UTF-8
import unittest
import time

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
class PythonOrgSearch(unittest.TestCase):
#coding=UTF-8
import unittest
import time

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
class PythonOrgSearch(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
    def test_search_in_python_org(self):
        driver = self.driver

        driver.get("http://t.people.com.cn/indexV3.action")
        elem = driver.find_element_by_xpath('//*[@id="userName"]')
        elem.send_keys("18133592036")
        ggg = driver.find_element_by_xpath('//*[@id="password_text"]')
        ggg.send_keys("qwertyuiop")
        driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/div[2]/form/div[4]/input').click()
        driver.find_element_by_xpath('/ html / body / div[2] / div / div[3] / a[2]').click()
        driver.find_element_by_xpath('/html/body/div[2]/div/a').click()

        for p in range(1,4):
            print '第' + str(p) + '页'
            for k in range(1, 4):
                driver.maximize_window()
                driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
                time.sleep(1)
            for m in range(1, 95):
                for k in driver.find_elements_by_xpath('/html/body/div[1]/div[2]/div/div[1]/div[4]/div[' + str(m) + ']/div[2]/div[4]/div[2]/a[3]'):
                    k.click()
                    time.sleep(0.1)
                    # print m
            a = driver.find_elements_by_class_name('list_item')
            l = []
            for i in a:
                if i not in l:
                    l.append(i)
            for m in l:
                print m.text
            driver.find_element_by_class_name('wbp_pagelist_nextbtn').click()


def setUp(self): self.driver = webdriver.Firefox() def test_search_in_python_org(self): driver = self.driver driver.get("http://t.people.com.cn/indexV3.action") elem = driver.find_element_by_xpath('//*[@id="userName"]') elem.send_keys("账号") ggg = driver.find_element_by_xpath('//*[@id="password_text"]') ggg.send_keys("密码") driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/div[2]/form/div[4]/input').click() driver.find_element_by_xpath('/ html / body / div[2] / div / div[3] / a[2]').click() driver.find_element_by_xpath('/html/body/div[2]/div/a').click()


在最下面的三行中,实现的是自动点击继续。

我们再来看实现翻页和评论的爬取。

在实现这两个的要求的时候,我是先把评论都点了一下,在去实现整个网页的爬取,可是这种操作不是很好。因为在实现吧整个页面都点击一下的时候,当有一个人发的微博是转发的别人的微博,这个功能就会点击被转发人的主页,有了跳转的页面的情况,于是就有了下面的这种方法:

#coding=UTF-8
import unittest
import time

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from selenium import webdriver
class PythonOrgSearch(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
    def test_search_in_python_org(self):
        driver = self.driver

        driver.get("http://t.people.com.cn/indexV3.action")
        elem = driver.find_element_by_xpath('//*[@id="userName"]')
        elem.send_keys("账号")
        ggg = driver.find_element_by_xpath('//*[@id="password_text"]')
        ggg.send_keys("密码")
        driver.find_element_by_xpath('/html/body/div[3]/div[2]/div[2]/div[2]/form/div[4]/input').click()
        driver.find_element_by_xpath('/ html / body / div[2] / div / div[3] / a[2]').click()
        driver.find_element_by_xpath('/html/body/div[2]/div/a').click()

        for p in range(1,4):
            print '第' + str(p) + '页'
            for k in range(1, 4):
                driver.maximize_window()
                driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
                time.sleep(1)
            for m in range(1, 95):
                for k in driver.find_elements_by_xpath('/html/body/div[1]/div[2]/div/div[1]/div[4]/div[' + str(m) + ']/div[2]/div[4]/div[2]/a[3]'):
                    k.click()
                    time.sleep(0.1)
                    # print m
            a = driver.find_elements_by_class_name('list_item')
            l = []
            for i in a:
                if i not in l:
                    l.append(i)
            for m in l:
                print m.text
            driver.find_element_by_class_name('wbp_pagelist_nextbtn').click()

以上就是这次的程序。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值