pythonselenium模拟登陆爬取信息_python3 使用selenium模拟登陆天眼查抓取数据

由于之前用Scrapy 抓了一些公司的名称,但是没有准确的联系方式,所以就自己就学习了一下使用selenium自动化工具,速度比较慢,网上也有很多这方面的代码,但是大部分的网页解析部分都出错了,可能是这种网站定时会更改一下网页的固定几个标签。

网上也有很多说如果遇到一些防爬虫特别强的网站,比如企查查...使用了滑动验证和图像验证码选择,实在是逆天,对于刚接触爬虫还是不要去选择攻破,可以考虑通过selenium打开窗口,用time模块延时,然后手动登录,然后获取当前登录的cookie,之后再通过其他模块或者框架,利用cookie免登录进去爬取。这个思路倒是很不错,过段时间去学习一下。

这个小项目还是有很多缺点的,比如访问时间太快,访问的时间统一。如果连续点击大概40多个公司后就会检测到,怀疑是机器人,然后就要进行图像验证。不过应该可以用random个随机时间用time模块,这样子来模拟更真实的人操作。

# -*- coding: UTF-8 -*-

from selenium import webdriver

from selenium.webdriver.common.by import By #引用网页选择器

from selenium.webdriver.support.ui import WebDriverWait #引用设定显示等待时间

from selenium.webdriver.support import expected_conditions as EC #引用等待条件

import time

import threading

#————————————天眼查大类————————————————

class Tianyan():

def __init__(self,user,pwd):

self.browser=webdriver.Firefox() #实例化浏览器对象,并命名为 browser

self.user=user

self.pwd=pwd

self.wait=WebDriverWait(self.browser,5) #设定浏览器最大等待时间为5秒钟,超过就报错

self.get_url()

#————————————触发浏览器对象————————————

def get_url(self):

self.browser.get("https://www.tianyancha.com/") #打开天眼查浏览器

button=self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME,"link-white"))) #等待目标可以点击

button.click()

button2=self.wait.until(EC.element_to_be_clickable((By.XPATH,'//div[@class="login-warp"]/div[1]/div[3]/div[1]/div[2]')))

button2.click()

#———————————公司文本————————————

def write(self):

with open(doc_company,"rb") as f:

for i in f :

yield i.decode(encoding='utf-8')

#———————————登录——————————————————

def check_login(self):

try:

input_user = self.browser.find_element_by_xpath('//div[@class="login-warp"]/div[1]/div[3]/div[2]/div[2]/input')

input_psw = self.browser.find_element_by_xpath('//div[@class="login-warp"]/div[1]/div[3]/div[2]/div[3]/input')

input_user.send_keys(self.user) #发送登录账号

input_psw.send_keys(self.pwd)

time.sleep(1) #等待 一秒 方式被识别为机器人

login=self.wait.until(EC.element_to_be_clickable((By.XPATH,'//div[@class="login-warp"]/div[1]/div[3]/div[2]/div[5]')))

login.click()

return True

except Exception:

return False

# ———————————发送要查询公司的名称——————————————————

def check_company(self,company):

company_input = self.browser.find_element_by_id("home-main-search")

company_click = self.wait.until(EC.element_to_be_clickable((By.XPATH,'//div[@class="input-group-btn btn -hg"]')))

company_input.send_keys(company)

time.sleep(0.2)

company_click.click()

# ————————————获取要查询的公司的名称、法人、电话信息—————————————————

def get_news(self):

name = self.browser.find_element_by_xpath('//div[@class="header"]/a/em').text

faren = self.browser.find_element_by_xpath('//div[@class="info"]/div[1]/a').text

phone = self.browser.find_element_by_xpath('//div[@class="contact"]/div[1]/span[2]').text

company_list = "公司名称:|%s |法人:| %s|电话:| %s" % (name, faren, phone)

self.downlode_company(company_list) #存储信息

print(company_list)

#———————————存储需要时保存的信息——————————————————

def downlode_company(self,data):

with open(doc_check_company, "a", encoding="utf-8") as f:

f.write(data)

f.write("\n")

# ———————————主要运行逻辑——————————————————

def main(self):

if self.check_login(): #

f=self.write()

for company in f:

try:

self.check_company(company)

get_thread=threading.Thread(target=self.get_news()) #使用线程来存储信息

get_thread.start()

self.browser.back()

except:

message = '公司名称:|%s|该公司电话法人资料不齐全,无法抓取' % company

print(message)

self.downlode_company(message)

self.browser.back()

else:

print("账号密码不正确,请重新核对")

#———————————主体参数———————————————————————

if __name__ == '__main__':

user= #账号

pwd='' #密码

doc_check_company='check_company.txt' #查询之后的公司名称

doc_company='company.txt' #需要查询的公司列表

time1=time.time()

window=Tianyan(user,pwd)

window.main()

time2=time.time()

print(time2-time1)

刚学了下生成器的概念,在这里就用了一下yield,还用了一下线程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mp4格式

下面的软件下载地址:http://download.csdn.net/source/2607382 ftyp: 这是一个筐,可以装mdat等其他Box。 例:00 00 00 14 66 74 79 70 69 73 6F 6D 00 00 02 00 6D 70 34 31 语义为:ftyp: Major brand: isom Minor version: 5…

PyQt5案例汇总(简洁版)

01菜单栏 import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIconclass Example(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):exitAct QAction(QIcon(exit.png), &Exit,…

个人关于浮动的理解

浮动带来的影响: ①. 能够让浮动之后的元素布局产生混乱 (元素浮动后脱离了标准文档流,它的布局也就不再遵循标准文档流的规则,多个浮动元素在一起的时候就会随着窗口的变化而变化,也就失去了稳定的布局) ②…

接口测试 rest-assured 使用指南

转载:https://testerhome.com/topics/7060 原文:https://github.com/rest-assured/rest-assured/wiki/Usage本文github地址:https://github.com/RookieTester/rest-assured-doc 注意,如果您正在使用1.9.0或者更早的版本请参考旧文…

python中格式化字符串的作用_python中字符串格式化的意义(化妆)

格式 描述%%百分号标记 #就是输出一个%%c字符及其ASCII码%s字符串%d有符号整数(十进制)%u无符号整数(十进制)%o无符号整数(八进制)%x无符号整数(十六进制)%X无符号整数(十六进制大写字符)%e浮点数字(科学计数法)%E浮点数字(科学计数法,用E代替e)%f浮点数字(用小数点…

MongoDB的快速手动安装

就是关于MongoDB主从库的安装配置和启动。网上关于MongoDB的安装有大量的文章供大家学习。我这里提供一个Windows环境下MongoDB主从库的快速手动安装的方法,只需要三步即可。 先下载的安装包,解压缩后找到bin文件夹,将bin文件夹拷贝至你自己的…

MP4音频解码信息

文章转载自:http://blog.csdn.net/flyingqr/archive/2010/02/02/5282600.aspx 版权归原作者,编辑:小乙哥 MP4文件格式分为头部和数据两部分,头部是由许多被称作Atom的结构单元嵌套或排列而成,数据部分则完全为实际数据…

时序图 分支_UML用例图

UML用例图用例图有以下东东:用例参与者关联系统边界用例使用椭圆来表示,椭圆里边写上用例的名称:这里的用例可以理解为一个动作或行为,或者一个对象。参与者用一个小人儿,在小人儿下面写上参与者名称,例如学生:关联用一条线表示:把很多个用例放到一个大的矩形框里。…

Python脚本实现汉子转拼音

起步 中华文化博大精深,是中华民族的财富,吸收和继承发扬中 华文化,是现代每个炎黄子孙无可推卸的天职。 今天小编就交大家用python写一个脚本,实现汉子和拼音之间的转换 pinyin.py 汉字转拼音,With Python Example: from pinyin impor…

MySQL innodb_table_stats表不存在的解决方法

在做实验时,使用mysqldump命令报错[rootlinux-mysql02 3306]# mysqldump -uroot -p123456 -S /u02/data/3306/mysql.sock -A -B --events | gzip > /opt/rep.sql.gzmysqldump: Got error: 1146: Table mysql.innodb_index_stats doesnt exist when using LOCK TA…

自定义封装 banner 组件

1. 效果图预览 2.基本功能 一个简单方便的轮播图组件,基于viewpager 基础上进行的封装。可设置 项目中图片,网络图片, View;支持循环自动播放,手势滑动切换,item点击事件,可设置 点点的样式宽高、颜色、大小…

vb.net服务器启动后cpu占用了70_记一次服务器被异常程序占用的解决过程(怀疑黑客攻击)...

最近在跑实验,但是突然发现程序运行变慢,然后top命令查看程序运行情况,发现有异常进程,名字叫 bash,占用 2400% CPU计算资源。刚开始怀疑是挖矿程序,因实验室网络IP为教育网公网,怀疑被攻击&…

3gp文件格式研究 (转windcao的专栏)

序言 06我开始做3gp文件的播放器,但是关于3gp的文档太少了也很难找,在网友luxh的帮助下,我终于有了第一份关于3gp文件格式的文档《ISO/IEC 14496-12,ISO媒体文件格式》.在此真心感谢luxh的贡献.当然了是英文版的,有文档就不错了.为了便于查阅和理解,我把之后陆续找…

Android开发必用工具及其进阶途径

三百六十行,行行出状元,怎么样才能在Android行业中当个状元了,开发过程中的高效、自我能力的提升显得至关重要,步入IT行业更是要时时刻刻学习,新技术更新快,今天将介绍一下Android开发中必用工具及其进阶途…

MySQL遇到check the manual that corresponds to your MySQL server version for the right syntax错误

原来是MySQL表中不能包含关键字 转载于:https://www.cnblogs.com/flycoding/p/7088465.html

Python脚本实现图片加水印

起步 图片是指由图形、图像等构成的平面媒体,有形式的事物,我们看到的,是图画、照片、拓片等的统称。 为了保护一些原创图片的版权,某些时候我们需要在图片上面,加上水印,当然你可以用Photoshop来做,只不过如果图片数量过多,亦或者图片的动态生成的时候…

yarn 怎么查看有多个job在跑_flink on yarn 模式下提示yarn资源不足问题分析

背景在实时计算平台上通过YarnClient向yarn上提交flink任务时一直卡在那里,并在client端一直输出如下日志:(YarnClusterDescriptor.java:1036)- Deployment took more than 60 seconds. Please check if the requested resources are available in the Y…

MPEG-2TS码流编辑的原理及其应用(转载

[作者:辽宁电视台 赵季伟] 在当今数字媒体不断发展、新媒体业务不断涌现 的前提下,实践证明襁褓中的新媒体只有两种经营方略可供选择:或是购买并集成整套节目,或是低成本深加工新节目,再不可能去按照传统生产模式…

Python中的yield详解

阅读别人的python源码时碰到了这个yield这个关键字,各种搜索终于搞懂了,在此做一下总结: 通常的for…in…循环中,in后面是一个数组,这个数组就是一个可迭代对象,类似的还有链表,字符串&#xf…

shell循环结构之while循环

while循环 1) while CONDITION; dostatementstatement<改变循环条件真假的语句>done 编写脚本&#xff0c;计算1---100的和 #!/bin/bash#sum0i1while [ $i -le 100 ]; dolet sum$sum$ilet i$i1doneecho $sum2) while true; do statementstatementdone #!/bin/bash#while …