selenium 模拟登陆豆瓣,爬去武林外传的短评

selenium 模拟登陆豆瓣,爬去武林外传的短评:

  在最开始写爬虫的时候,抓取豆瓣评论,我们从F12里面是可以直接发现接口的,但是最近豆瓣更新,数据是JS异步加载的,所以没有找到合适的方法爬去,于是采用了selenium来模拟浏览器爬取。

  豆瓣登陆也是改了样式,我们可以发现登陆页面是在另一个frame里面

所以代码如下:

# -*- coding:utf-8 -*-
# 导包
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 创建chrome参数对象
opt = webdriver.ChromeOptions()
# 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数
opt.set_headless()
# 用的是谷歌浏览器
driver = webdriver.Chrome(options=opt)
driver=webdriver.Chrome()
# 登录豆瓣网
driver.get("http://www.douban.com/")

# 切换到登录框架中来
driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
# 点击"密码登录"
bottom1 = driver.find_element_by_xpath(‘/html/body/div[1]/div[1]/ul[1]/li[2]‘)
bottom1.click()

# # 输入密码账号
input1 = driver.find_element_by_xpath(‘//*[@id="username"]‘)
input1.clear()
input1.send_keys("xxxxx")

input2 = driver.find_element_by_xpath(‘//*[@id="password"]‘)
input2.clear()
input2.send_keys("xxxxx")

# 登录
bottom = driver.find_element_by_class_name(‘account-form-field-submit ‘)
bottom.click()

 然后跳转到评论界面      https://movie.douban.com/subject/3882715/comments?sort=new_score

点击下一页发现url变化  https://movie.douban.com/subject/3882715/comments?start=20&limit=20&sort=new_score 所以我们观察到变化后可以直接写循环

获取用户的姓名

driver.find_element_by_xpath(‘//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/a‘.format(str(i))).text用户的评论

driver.find_element_by_xpath(‘//*[@id="comments"]/div[{}]/div[2]/p/span‘.format(str(i))).text然后我们想要知道用户的居住地:
1    #获取用户的url然后点击url获取居住地
2             userInfo=driver.find_element_by_xpath(‘//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/a‘.format(str(i))).get_attribute(‘href‘)
3             driver.get(userInfo)
4             try:
5                 userLocation = driver.find_element_by_xpath(‘//*[@id="profile"]/div/div[2]/div[1]/div/a‘).text
6                 print("用户的居之地是:  ")
7                 print(userLocation)
8             except Exception as e:
9                 print(e)

这里要注意有些用户没有写居住地,所以必须要捕获异常

完整代码

# -*- coding:utf-8 -*-
# 导包
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

class doubanwlwz_spider():
    def __init__(self):
        # 创建chrome参数对象
        opt = webdriver.ChromeOptions()
        # 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数
        opt.set_headless()
        # 用的是谷歌浏览器
        driver = webdriver.Chrome(options=opt)
        driver=webdriver.Chrome()
        self.getInfo(driver)
    def getInfo(self,driver):
    # 切换到登录框架中来
    # 登录豆瓣网
        driver = driver
        driver.get("http://www.douban.com/")
        driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
        # 点击"密码登录"
        bottom1 = driver.find_element_by_xpath(‘/html/body/div[1]/div[1]/ul[1]/li[2]‘)
        bottom1.click()
        # # 输入密码账号
        input1 = driver.find_element_by_xpath(‘//*[@id="username"]‘)
        input1.clear()
        input1.send_keys("ZZZ2")

        input2 = driver.find_element_by_xpath(‘//*[@id="password"]‘)
        input2.clear()
        input2.send_keys("ZZZ")

        # 登录
        bottom = driver.find_element_by_class_name(‘account-form-field-submit ‘)
        bottom.click()

        time.sleep(1)
        driver.get(‘https://movie.douban.com/subject/3882715/comments?start=300&limit=20&sort=new_score‘)
        search_window = driver.current_window_handle
        # pageSource=driver.page_source
        # print(pageSource)
        #获取用户的名字 每页20个
        for i in range(1,21):
            print("用户的评论是:  ")
            print(driver.find_element_by_xpath(‘//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/a‘.format(str(i))).text)
     #  获取用户的评论
        # print(driver.find_element_by_xpath(‘//*[@id="comments"]/div[1]/div[2]/p/span‘).text)
            print("用户的名字是: ")
            print(driver.find_element_by_xpath(‘//*[@id="comments"]/div[{}]/div[2]/p/span‘.format(str(i))).text)
    #获取用户的url然后点击url获取居住地
            userInfo=driver.find_element_by_xpath(‘//*[@id="comments"]/div[{}]/div[2]/h3/span[2]/a‘.format(str(i))).get_attribute(‘href‘)
            driver.get(userInfo)
            try:
                userLocation = driver.find_element_by_xpath(‘//*[@id="profile"]/div/div[2]/div[1]/div/a‘).text
                print("用户的居之地是:  ")
                print(userLocation)
            except Exception as e:
                print(e)
            driver.back()

pageNum=int(input("请输入您想要爬去的步行街的页数: "))
AAA=doubanwlwz_spider()

  

原文地址:https://www.cnblogs.com/ZFBG/p/10992970.html

时间: 2024-10-14 06:25:35

selenium 模拟登陆豆瓣,爬去武林外传的短评的相关文章

爬虫再探实战(二)———模拟登陆豆瓣

爬虫有时候也要进入登陆页面之后进行爬取,这就避免不了模拟登陆了.自己在这里卡了好久,终于算是模拟成功一次. 当然,这次也是用requests,真是好用的很呢.上代码. #------------ #2016/6/11 #模拟登陆豆瓣成功!!! import requests url = 'https://accounts.douban.com/login' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.

Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys import time #如果获取页面时获取不到文本内容,加入下面参数 driver = webdriver.PhantomJS(service_args=[

模拟登陆+数据爬取 (python+selenuim)

以下代码是用来爬取LinkedIn网站一些学者的经历的,仅供参考,注意:不要一次性大量爬取会被封号,不要问我为什么知道 #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from bs4 import BeautifulSoup diver=webdriver.Chrome() diver.get('https://www

爬虫再探实战(二)———模拟登陆豆瓣(续集。。)

关于豆瓣,还是算是爬虫友好型的网站,之前模拟登陆也很容易就成功了,不过最近要在豆瓣抓点东西,发现代码已经不能用了.打印源码发现,需要验证码了. 所以,这里写个续集...较上一篇改动主要在验证码和一个随机字符串的获取,再之后加入pyload就行了.具体参照代码. import re import requests headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)

使用python - selenium模拟登陆b站

思路 输入用户名密码点击登陆 获取验证码的原始图片与有缺口的图片 找出两张图片的缺口起始处 拖动碎片 功能代码段 # 使用到的库 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_condit

selenium模拟登陆

案例一:网站模拟登录 # -*- coding:utf-8 -*- # douban.py #coding=utf-8 import time from selenium import webdriver from selenium.webdriver.common.keys import Keys class Douban(): def __init__(self): self.url = "https://www.douban.com/" self.driver = webdriv

python selenium 模拟登陆百度账号

代码: from selenium import webdriver url = 'https://passport.baidu.com/v2/?login' username = 'your_username' passwd = "your_password" driver = webdriver.Chrome() # 打开chrome浏览器 driver.get(url) # 打开指定的网页 input_username = driver.find_element_by_id(&q

java+selenium模拟登陆新浪微博demo

java代码 import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class crawler { public static

爬虫实现模拟登陆豆瓣

一: # -*- encoding:utf-8 -*- import requests from bs4 import BeautifulSoup import urllib import re loginUrl = 'http://accounts.douban.com/login' formData={ "redir":"http://movie.douban.com/mine?status=collect", "form_email":&q