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

本来今天应该写的是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
    评论
首先,你需要使用 Python 爬虫技术来获取微博用户信息。这里我们使用 Python 的 requests 和 BeautifulSoup 库进行网页解析和数据抓取。 以下是一个简单的示例代码,可以获取指定微博用户的基本信息,包括用户名、性别、生日、所在地、个人简介等等,并将这些信息保存到一个 Excel 表格中: ```python import requests from bs4 import BeautifulSoup import openpyxl # 微博用户的主页 URL url = 'https://weibo.cn/u/1234567890' # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } # 发送 GET 请求,获取 HTML 页面 response = requests.get(url, headers=headers) html = response.content # 解析 HTML 页面,获取用户信息 soup = BeautifulSoup(html, 'html.parser') name = soup.find('div', class_='ut').find('span', class_='ctt').text[:-4] gender = soup.find('div', class_='tip').text[:-1] birthday = soup.find('div', text='生日:').next_sibling.strip() location = soup.find('div', text='地区:').next_sibling.strip() bio = soup.find('div', class_='tip2').text.strip() # 将用户信息保存到 Excel 表格中 wb = openpyxl.Workbook() ws = wb.active ws.title = '微博用户信息' ws.cell(1, 1, '用户名') ws.cell(1, 2, '性别') ws.cell(1, 3, '生日') ws.cell(1, 4, '所在地') ws.cell(1, 5, '个人简介') ws.cell(2, 1, name) ws.cell(2, 2, gender) ws.cell(2, 3, birthday) ws.cell(2, 4, location) ws.cell(2, 5, bio) wb.save('weibo_user_info.xlsx') ``` 需要注意的是,代码中的 `url` 和 `headers` 可能需要根据实际情况进行修改。此外,还需要安装 openpyxl 库,用于操作 Excel 表格。可以使用以下命令进行安装: ``` pip install openpyxl ``` 这只是一个简单的示例代码,如果需要爬取更多的用户信息,或者批量爬取多个用户的信息,还需要进一步完善代码。同时也需要注意不要过度爬取,以免触发反爬机制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值