豆瓣-代理ip登陆-css解决class空格

首先附上源码:

from bs4 import BeautifulSoup
from selenium import webdriver
import time
from ArticleSpider.proxy_pool import proxy
import csv

#代理Ip
iplist=proxy().get_ip_list()
proxies=proxy().get_random_ip(iplist)

#账号密码
user={
    ‘word‘:‘账号‘,
    ‘password‘:‘密码‘
}

# 进入浏览器设置,选择
options = webdriver.ChromeOptions()
#添加代理ip,获得字典中的值
options.add_argument(str(proxies[‘https‘]))
#更换请求头
brow = webdriver.Chrome(‘D:\Python\chromedriver.exe‘, chrome_options=options)

#输入用户信息,登录!
url = ‘https://movie.douban.com/subject/26752088/comments?sort=new_score&status=P‘
brow.get(url)
brow.find_element_by_class_name(‘nav-login‘).click()
time.sleep(1)
brow.get(brow.current_url)
brow.find_element_by_class_name(‘account-tab-account‘).click()
brow.find_element_by_class_name(‘account-form-input‘).send_keys(user[‘word‘])
brow.find_element_by_id(‘password‘).send_keys(user[‘password‘])
#这里使用css,因为多个class值,然后空格那里改为.,并且前面也加.
brow.find_element_by_css_selector(‘.btn.btn-account.btn-active‘).click()
brow.maximize_window()#窗口最大化
time.sleep(2)

brow.get(url)
#打开文件,准备追加内容
file=open(‘yaoshen.csv‘,‘a‘,encoding=‘utf-8‘,newline=‘‘)
writer=csv.writer(file)

for j in range(30):
    #获得当前url
    brow.get(brow.current_url)
    #切换窗口失败!
    # brow.switch_to.window(str(brow.current_window_handle))
    soup=BeautifulSoup(brow.page_source,‘lxml‘)
    # print(soup)
    #滑动到底部
    time.sleep(1)
    brow.execute_script(‘window.scrollTo(0,2500)‘)
    time.sleep(1)
    for i in soup.find_all(‘span‘,class_="short"):
        content = i.get_text()
        content = content.strip()  # 去掉空格
        content = content.replace(‘\n‘, ‘‘).replace(‘\t‘, ‘‘).replace(‘\xa0‘, ‘‘).replace(‘\r‘, ‘‘)  # 去掉转义字符
        content = content.split(‘*‘)  # 转换为列表
        print(content)
        writer.writerow(content)

    time.sleep(2)
    #点击下一页
    brow.find_element_by_class_name(‘next‘).click()
# 退出,清除浏览器缓存
brow.quit()

  这个项目中用到了自己编写的代理ip池代码,将会在下面附上。

首先说一下遇到的错误,在选择登录豆瓣的时候,多次密码错误,因为误把其他网站密码写上去了,然后刚开始还找不到这个路径,因为所属的class有多个空格,需要使用css或者其他方法。

第一种方法:class值取其中之一,但是我觉得可能出错,因为class值可能不唯一

第二种方法:使用 css.selector,每个class值前面加 .

此外,在debug过程中发现一直打印第一页的评论,后来发现我只打开了一次浏览器,然后没有更新url,所以解析得到的始终是第一页的数据,所以需要使用brow.current_url来获取点击下一页后的url,然后重新解析页面

还有,每当我的浏览器运行到第十二页左右就会提示我没有权限,需要登陆,于是我就增加了一个登录过程,虽然登陆后的页面不是目标页面,但是可以直接访问目标页面并且状态依旧是已登录状态!

最后再附上代理ip池的代码,这个项目中仅从代理ip池中取得一个代理ip,作用不大,但是可以看看,因为在selenium中使用代理ip的方法和requests的完全不一样,不可以直接加到get方法中!

# IP地址取自国内髙匿代理IP网站:http://www.xicidaili.com/nn/

from bs4 import BeautifulSoup
import requests
import random
import urllib

class proxy(object):

    # 从代理ip网站获取代理ip列表函数,并检测可用性,返回ip列表
    def get_ip_list(self):
        url = ‘http://www.xicidaili.com/nn/‘
        headers = {
            ‘User-Agent‘: ‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36‘
        }
        rsp = requests.get(url, headers=headers)
        soup = BeautifulSoup(rsp.text, ‘lxml‘)
        #之前不使用lxml而使用html报错,显示最好使用lxml
        ips = soup.find_all(‘tr‘)
        # print(ips)
        ip_list = []
        #这个类只选择第一页的公开ip,暂时够用了
        for i in range(1, len(ips)):
            ip_info = ips[i]
            tds = ip_info.find_all(‘td‘)
            ip_list.append(tds[1].text + ‘:‘ + tds[2].text)
        # 检测ip可用性,移除不可用ip:(这里其实总会出问题,移除的ip可能只是暂时不能用,剩下的ip使用一次后可能之后也未必能用)
        for ip in ip_list:
            try:
                proxy_host = "https://" + ip
                proxy_temp = {"https": proxy_host}
                #尝试使用这个ip去打开百度的网站,如果能打开就默认为是可以使用的ip
                url_baidu=‘https://www.baidu.com‘
                urllib.urlopen(url_baidu, proxies=proxy_temp)
            except Exception as e:
                #如果无法打开百度网站,那么就把这个ip从可用ip列表中移除
                ip_list.remove(ip)
                continue
        return ip_list

    # 从ip池中随机获取可用的ip列表
    def get_random_ip(self,ip_list):
        proxy_list = []
        for ip in ip_list:
            proxy_list.append(‘https://‘ + ip)
        #从可用ip列表中随机选取一个可用ip
        proxy_ip = random.choice(proxy_list)
        proxies = {‘https‘: proxy_ip}
        return proxies

  

原文地址:https://www.cnblogs.com/fodalaoyao/p/10509689.html

时间: 2024-07-29 11:52:44

豆瓣-代理ip登陆-css解决class空格的相关文章

CSS解决无空格太长的字母,数字不会自动换行的问题

其实很简单,代码如下所示,注意 Style: <div class="detail_title" style="word-break: break-all;"><%=StringUtil.toHTML(title) %></div> 默认情况下,一个 DIV或者其他元素的文本,如果都是无文字分隔符,无空格,则不会自动换行,比如: <div class="detail_title" style="

WebMagic使用代理ip爬数据解决HTTP407问题

手头一个小活儿是爬竞品网站数据.使用webmagic来实现.光公司ip不行,被封了就会影响业务正常访问.刚好公司另一个项目购买了代理IP资源“站大爷”,那个项目夭折了,于是申请借来用用. 调通站大爷提供的获取代理ip的api接口并没什么技术难度.可是,在运行爬数据程序时,收到http的407错误.经了解,407是授权错误,要求代理身份验证.站大爷技术支持提醒说检查一下产品配置.发现“一手私密代理”里当前授权模式是“用户名+密码”.然后,再看webmagic的Proxy类,有一个构造器是除了必传的

CSS解决无空格太长的字母,数字不会自己主动换行的问题

事实上非常easy,代码例如以下所看到的,注意 Style: <div class="detail_title" style="word-break: break-all;"><%=StringUtil.toHTML(title) %></div> 默认情况下,一个 DIV或者其它元素的文本,假设都是无文字分隔符,无空格,则不会自己主动换行,比方: <div class="detail_title" st

如何利用动态代理IP来做SEO(网络营销)

对动态代理IP大家都不陌生,今天我们来聊下如何利用动态代理ip来做SEO优化.其实除了SEO很多网络营销也都需要用到代理IP,因为很多网络营销的用户都知道,投票.注册帐号.发帖子等工作,都需要用到代理IP这个工具,才能毫无限制的操作. 动态代理IP对seo网站运营的影响: 我们在尝试运用动态代理IP之前,先说说咱们有什么常规化的seo优化方式去优化网站,其中要做好2点.第一点做好基本优化.第二点,深入认识搜索引擎: 1:做好基本优化:说的就是站内优化和站外优化.站内优化就是把网站优化的基础完善,

python使用IP代理示例及出错解决方法

一.代码示例 # -*- coding:utf-8 -*- import requests header = {     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36' } proxy_ip = {     'https': 'https://115.28.148.137:8118'

爬取西刺网代理ip,并把其存放mysql数据库

需求: 获取西刺网代理ip信息,包括ip地址.端口号.ip类型 那,如何解决这个问题? 分析页面结构和url设计得知: 数据都在本页面可以全部获取,没有单独的详情页面 下一页通过更改当前页面最后url后缀进行跳转页面,那我实现URL的拼接不就解决这个问题了 那,软件的运行环境? python3.5 scrapy twisted request pymysql 以上是第三方包,通过pip安装 MySQL服务 其中db,user,password的值根据实际情况而定 #!/usr/bin/pytho

代理服务器基本知识普及代理IP使用方法!

本文并未从专业角度进行详细讲解,而是从应用的角度出发来普及一些代理服务器的基本知识.文章明显是搜集多方资料的拼凑,而且比较老了,但往往越老的东西越接近事物的本质,更容易窥探到原理,对于刚接触的人来说,看起来比专业理论资料更易懂哈~ 扫盲篇:  什么是代理服务器?  代理服务器是介于浏览器和Web服务器之间的一台服务器,当你通过代理服务器上网浏览时,浏览器不是直接到Web服务器去取回网页,而是向代理服务器发出请求,由代理服务器来取回浏览器所需要的信息,并传送给你的浏览器. 什么是免费代理服务器 ?

如何搭建稳定的代理ip池, 供爬虫使用

新型的代理ip池aox_proxy_pool 在这篇文章之前, 应该不少人都看过很多搭建代理ip池的文章, 然后发现都是坑, 无法使用.说的比较多的 推荐买xx家的代理ip, 贼稳定, 好使(广告) 抓取xx免费代理ip, 然后自己写一个校验, 然后写一个api, 提供给爬虫使用 第一种方法就不说了, 真的存在几家不错的代理ip(别问我谁家的好, 我不知道, 我写这篇文章就为了推销我自己写的项目好伐) 第二种, github上这种项目海了去了, 绝大部分, 在你搭建好以后, 发现爬虫还是爬不动,

兔子IP教你解决日常使用过程中ip被封锁IP被限制的几种方法

兔子IP解决日常使用过程中ip被封锁IP被限制的几种方法 方法1使用多IP:1.IP必须需要,比如ADSL.如果有条件,其实可以跟机房多申请外网IP.2.在有外网IP的机器上,部署代理服务器.3.你的程序,使用轮训替换代理服务器来访问想要采集的网站.好处:1.程序逻辑变化小,只需要代理功能.2.根据对方网站屏蔽规则不同,你只需要添加更多的代理就行了.3.就算具体IP被屏蔽了,你可以直接把代理服务器下线就OK,程序逻辑不需要变化. 方法2.有小部分网站的防范措施比较弱,可以伪装下IP,修改X-Fo