爬虫项目的简单总结

上面两个文章主要展示了两个Selenium爬虫的具体程序,对于中间遇到的小的问题和具体内容的实现在这里进行简单的介绍和总结。

1、通过Cookie实现网站登陆

保存Cookie

## 保存网站cookiefrom selenium import webdriver
import os
import time
import json## 获取Cookie
def get_cookies(url,filepath):browser = webdriver.Chrome()browser.get(url)## 扫码time.sleep(20)dictCookies = browser.get_cookies()#  转换成字符串保存jsonCookies = json.dumps(dictCookies)with open("./json/cookies.json", 'w') as f:f.write(jsonCookies)print('cookies保存成功!')browser.quit()log_url = 'https://www.zhipin.com/?city=100010000&ka=city-sites-100010000'
file = './json/bosscookies.json'
get_cookies(log_url,file)

测试Cookie

# !/usr/bin/python3.4
# -*- coding: utf-8 -*-
## 实现登陆
from selenium import webdriver
import os
import time
import jsondef getCookie(browser,url):with open('./json/cookies.json', 'r', encoding='utf8') as f:listCookies = json.loads(f.read())for cookie in listCookies:cookie_dict = {'domain': '.zhipin.com','name': cookie.get('name'),'value': cookie.get('value'),'path': '/',"expires": '','sameSite': 'None','secure': cookie.get('secure')}browser.add_cookie(cookie_dict)browser = webdriver.Chrome()
url = "https://www.zhipin.com/?city=100010000&ka=city-sites-100010000"
browser.get(url)
newwindow='window.open("https://www.zhipin.com/?city=100010000&ka=city-sites-100010000");'
# 删除原来的cookie
browser.delete_all_cookies()
# 携带cookie打开
getCookie(browser,url)
# 通过js新打开一个窗口
browser.execute_script(newwindow)
input("查看效果")
browser.quit()

上面的程序参考了这篇文章:利用selenium携带cookies实现免登录

2、Selenium元素定位


以百度的网页为例,在进行对webdriver通过xpath进行元素定位时可以通过下面的步骤快速定位:页面右键点击检查;之后找到当前按钮"登陆"的代码部分;右键copy可以直接得到在当前页面获得该元素的xpath,非常简单高效。

在使用webdriver进行元素定位时可以对得到的结果再次进行元素定位,可以更好对程序进行设计和处理。
中间在处理table中的tb、td时出现了一个问题:Xpath无法解析(tbody)。这个感觉是网站的问题,后来更换了爬取的页面,就没有这个问题了。关于这个问题的具体描述和分析可以参考这篇文章:Python爬虫——从浏览器复制的Xpath无法解析(tbody)

——————————————————————————
补充一下Selenium中对元素定位,在进行点击时可能会出现报错,就是可以找点界面中的元素但是click() 之后页面没有刷新。这时候可以增加slepp的时间等待界面加载,另一个就是调用其他方法:


## driver.find_element_by_xpath('//*[@id="search-jobs-clear-options"]').click()
## 上面方式失效  采用下面的实现方法
button = driver.find_element_by_xpath('//*[@id="search-jobs-clear-options"]')
webdriver.ActionChains(driver).move_to_element(button).click(button).perform()

3、Selenium webdriver 实现账号密码登陆

通过webdriver 的find_element_by_id(“password”)可以定位到每个网站的账号密码的输入位置,然后传入已有的字符串就可以实现登陆。这种登陆方式可以解决很多网站的登陆问题。

def Login():Name = "******"Password = "********"# 输入账号time.sleep(4)driver.find_element_by_id("username").send_keys(Name)# 输入密码driver.find_element_by_id("password").send_keys(Password)time.sleep(4)# 点击登录按钮driver.find_element_by_id("submit_id").click()time.sleep(4)

4、链家房价爬取

爬取链家中所有地区的房价是半年前最开始测试的一个爬虫,主要用的requests。这个爬虫数据获取的比较快,但是之前IP就总是被检测出来,然后进行安全验证。当时就是爬取一个地区的对数据进行保存,进行完安全验证,在原来数据的基础上接着爬。然后勉强拼凑除了全国的房价数据。现在测试一下原来的爬虫,随便爬一下就要进行安全验证。相比于Selenium下的爬虫,速度虽然满了一点,但是爬取数据很稳定,从做完调试到爬取完数据,中间就没有进行过安全验证。文章貌似会审核不通过,具体程序可以去Github上查看

5、Boss和liepin工作信息的爬取

之前发布的爬取Boss工作信息的爬虫的博客审核未通过。具体爬虫后面会放在Github上在来补充。
liepin的爬虫可以爬取13个热门城市的所有工作信息。爬虫主要使用webdriver和requests。
liepin爬取的数据如下:

5、代理池proxy-pool

代理池的问题主要用的Github上的proxy_pool和 ProxyPool两种方式获取免费的代理,使用这种免费的透明代理,如果爬取得频率较高也是很容易被网站检测出来原始的IP的。但是可以构建和实现一下。
——————————————————————————————————————————
代理补充:通过proxy_pool在本地端口可以刷新获取一些免费的代理,pool会不断更新本地的IP池,从中获取代理信息,并在headers中添加proxies,requests 请求http://httpbin.org/get?show_env=1 提取返回的htlm文本信息,如果返回请求的html文件包含本机IP则说明该代理不是匿名代理,通过这种方法,可以从本地的IP池中筛选获得一些高匿名的代理,这些代理用于爬虫就很方便。
具体程序可以参考如下:

import requests
import re## proxy_pool的使用
## 参考
def get_proxy():return requests.get("http://127.0.0.1:5010/get/").json()
def delete_proxy(proxy):requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))ipinfourl = "http://httpbin.org/get?show_env=1"
## 你本机的公网IP地址
## 通过访问http://httpbin.org/ip 可以查看
ipcomputer = "**********"
ipAccess={"http://120.220.220.95:8085"}
## 从代理池中获取10个代理IP,并将高匿代理信息放在集合ipAccess中
for i in range(0,10):#获取IP代理proxy = get_proxy().get("proxy")proxies={"http": "http://{}".format(proxy)}print("当前测试代理:" + proxies["http"])#检查iptry:iptest = requests.get(url=ipinfourl,proxies=proxies,timeout=(10, 15))if not iptest:delete_proxy(proxy)print("请求超时,删除该代理")else:## 正则表达式获取添加代理后IP匿名情况new = re.findall(r"\d+\.\d+\.\d+\.\d+",iptest.text)if new:if ipcomputer in new:print("...透明代理...")else:ipAccess.add(proxies["http"])print(".....................匿名IP:%s....succes"% proxies["http"])except Exception as e:delete_proxy(proxy)print("当前代理无法访问,删除该代理.....")continue
print("——————————IP测试结束————————")

不足:上面对非匿名代理以及代理是否能用的判断的逻辑上存在一些混乱,但是最后筛选出的匿名代理是有效的
程序运行结果如下

爬虫中 Selenium-Requets-模拟登陆cookie-代理proxy 的简单总结相关推荐

  1. 爬虫实战3:模拟登陆知乎并爬取任意帖子数据

    ​      刚学爬虫时,看到一篇文章硬核破解知乎登陆,心潮澎湃,真男人!符合我的胃口!哼哧哼哧的立刻安排!   (半个小时过后)   似乎我是弱智?很多看不懂?(百度乱搜中-)恩还有种简单的?sel ...

  2. selenium 实战模拟登陆

    首先下载selenium模块,pip install selenium,下载一个浏览器驱动程序(我这里使用谷歌). #需要用到的所有包 from selenium import webdriver f ...

  3. Requests模拟登陆与代理设置

    一.登录页面信息爬取 1.cookie和session的定义 cookie是网站用来辨别用户身份,进行会话跟踪,储存在本地终端上的数据.他会在下一次请求的时候再一次携带并发送到浏览器上. sessio ...

  4. php selenium模拟登陆,12306 的selenium实现模拟登陆

    # 下面是12306 实现的模拟登陆 # 解码 应用超级鹰,注册用户,左侧栏软件ID进去,开启一个新软件,拿到软件ID # 下面测试都在jupyter里面实现 # 超级鹰类 cell import r ...

  5. Python爬虫教程,slenium模拟登陆知乎2020

    文章目录 引言 登录成功 解决方案 意外收获 参考资料 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如 ...

  6. Python爬虫教程:requests模拟登陆github

    1. Cookie 介绍 HTTP 协议是无状态的.因此,若不借助其他手段,远程的服务器就无法知道以前和客户端做了哪些通信.Cookie 就是「其他手段」之一. Cookie 一个典型的应用场景,就是 ...

  7. selenium免登录Java_使用selenium+java模拟登陆今日头条时需要手机验证码登陆,第二次怎么免输入信息登陆?...

    首次通过手机验证码登录后,获取cookie,并将cookie保存到map中. 在主程序中定义map: public static Map cookies; public static boolean ...

  8. 利用selenium+chrome模拟登陆合工大信息门户并进行自动填写测评

    最近学校要填写对于老师的评教,不填写的就无法进行下周的选课∑^)/ 我这么懒,自然不想一个一个点进去填写,想到最近在学爬虫,干脆写一个爬虫帮我弄算了 ╭~~~╮ (o~.~o) 首先打开我们学校的信息 ...

  9. Python Selenium + phantomJS 模拟登陆教务管理系统 “抢课”

    # _*_coding:utf-8_*_ from selenium import webdriver from selenium.webdriver.common.action_chains imp ...

最新文章

  1. python 解决最佳方案_python使用列表的最佳方案
  2. android小技巧(二)
  3. 零基础入门学习Python(16)-函数1,Python的乐高积木
  4. 使用shell脚本实现在liunx上进行svn的上传下载更新功能
  5. php中rsa加密及解密和签名及验签
  6. yarn========================(类似于node)
  7. php的验证码要gd库,PHP通过GD库实现验证码功能
  8. 关于创业,潮汕人、温州人做生意的多
  9. 【sketchup 2021】草图大师的高级工具使用3【复杂贴图制作实例(山体和球面贴图、全景天空绘制、吊顶添加光带)、图层(标记)工具使用、视图与样式工具的常规使用与高级使用说明】
  10. 查找下载外文文献,这个网站比知网好用多了,经过对比后,五星推荐给大家!
  11. 【人民币识别】基于RGB颜色空间实现人民币序列号识别含Matlab源码
  12. Java中涉及到和金钱有关的属性的类型
  13. 解决:adb devices error protocol falut(no status)
  14. 免费合并多个PDF文件
  15. 当AI遇上元宇宙:智能科技如何助力虚拟世界的发展?
  16. SEER见证人操作指南
  17. 写给喜欢数学和不喜欢数学的人们  zz
  18. 计算机配置太低,安装Win10系统电脑配置太低怎么办
  19. java编程10以内随机数字乘除,Java实现随机出题,10道10以内加减法计算代码实例...
  20. 第七届蓝桥杯有奖竞猜 JAVA

热门文章

  1. 快速上手Tomcat(eclipse中配置tomcat)
  2. raspberry pi_如何购买Raspberry Pi
  3. raspberry pi_如何使用Raspberry Pi构建WiFi相框
  4. 额外sql使用什么封装_为什么建立社区值得付出额外的努力
  5. opensource项目_Opensource.com生日快乐:开源7年
  6. 敏捷 橄榄球运动_为什么我为大学橄榄球博客选择Wordpress
  7. 为什么Docker,Vagrant和Ansible等工具比以往更热门
  8. 数组实例的includes()方法
  9. linux java services_在Linux上将Java应用程序作为服务运行
  10. postgresql 并发访问_PostgreSQL并发控制(显式锁定)