由于之前用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,还用了一下线程。

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

  1. python3 爬虫第二步Selenium 使用简单的方式抓取复杂的页面信息

    Selenium 简介 该系列专栏上一篇爬虫文章点击这里. 网站复杂度增加,爬虫编写的方式也会随着增加.使用Selenium 可以通过简单的方式抓取复杂的网站页面,得到想要的信息. Selenium ...

  2. 抓取网络源码python_使用Python进行网络抓取的新手指南

    抓取网络源码python 有很多很棒的书可以帮助您学习Python,但是谁真正读了这些A到Z? (剧透:不是我). 接下来是我的第一个Python抓取项目指南. 假定的Python和HTML知识很少. ...

  3. stata抓取html,(5)详解 stata 爬虫抓取网页上的数据 part 1

    *案例:抓取 http://www.tjcn.org 中国统计信息网上前50页(每页包含20个市的数据)的1000个地区的GDP数据.使用stata版本为 stata13,与12版本和14版本都不兼容 ...

  4. 使用WinDbg抓取程序报错的Dump文件,例如抓取IE崩溃的Dump

     前几天分享了一个关于如何抓蓝屏Dump的帖子,今天再和大家分享一个使用WinDbg来抓取程序崩溃的Dump.有了Dump后,我们可以很迅速的解决问题,比如说IE崩溃,QQ崩溃,很多时候我们是一点 ...

  5. Python爬虫:爬取百度图片(selenium模拟登录,详细注释)

    1.驱动下载 百度图片这种网站是动态的,即并不是网页中的内容全部存储在源代码中,而是不停地动态刷新,所以需要使用selenium模拟浏览器登录,除了安装selenium库之外,还需要针对不同地浏览器安 ...

  6. python爬取今日头条手机app广告_python3今日头条App电商数据抓取

    最近有几个同学让我们帮忙抓取今日头条app的数据,有的同学需要头条app 的广告数据,有的同学需要电商资讯的数据,之前已经在博客中发布过头条app的广告数据,这里我就来用电商的数据来给大家讲解. 1. ...

  7. python爬取路况信息查询_使用python调用web service抓取天气预报

    网上找到落落的抓取天气预报的代码,觉的简单易用,修改一下,放在后勤首页中.Webservice从 http://www.webxml.com.cn/webservices/weatherwebserv ...

  8. python爬关键词百度指数_详解python3百度指数抓取实例

    百度指数抓取,再用图像识别得到指数 前言: 土福曾说,百度指数很难抓,在淘宝上面是20块1个关键字: 哥那么叼的人怎么会被他吓到,于是乎花了零零碎碎加起来大约2天半搞定,在此鄙视一下土福 安装的库很多 ...

  9. python爬取app、返回的是加密数据_Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...

  10. 网站爬取工具_浅析阻碍网站内容被蜘蛛抓取的原因有哪些?

    众所周知,在搜索引擎中存在的蜘蛛其实就是一段代码,这段代码通过在各个网站爬取,以便于网站内容能够被搜索引擎收录.不过一般蜘蛛爬取是按照一定规则进行的,如果网站中出现了一些爬取障碍,那么蜘蛛爬取就会被打 ...

最新文章

  1. Caffe中对cifar10执行train操作
  2. python可以干什么工作-python到底能做什么
  3. Android安全加密:非对称加密
  4. 在GridView中设置每个单元格的数据
  5. 软考-信息系统项目管理师-项目成本管理
  6. 使用wlan接收器经常重新登录怎么办
  7. jQuery怎么改变img的src
  8. linux服务器的诗句迁移,使用scp命令在两台linux上对拷文件或者文件夹
  9. GitHub超过2600星的TensorFlow教程,简洁清晰还不太难丨资源
  10. 前端页面卡顿、也许是DOM操作惹的祸?
  11. HDMI接口 HDCP
  12. 绘制confusion matrix的R实现
  13. 阿里云的NoSQL存储服务OTS的应用分析
  14. 一名技术的原则—美团工作六年的认知(2020年)
  15. 椭圆是一个凸集的证明
  16. [附源码]java毕业设计房屋租赁管理系统
  17. Android闹钟制作过程图,小学闹钟手工制作步骤详解(配图)
  18. pdf.js 修改预览页面title
  19. element中el-dialog组件垂直居中完美解决方案,适配超高dialog
  20. 大数据行业再拉警报,51信用卡或将彻底沦陷?

热门文章

  1. 转载-信息化与系统集成技术-全面解析工业4-0和云计算、大数据
  2. Yandex-好用的以图搜图网站
  3. 英语六级-day10
  4. QT+Opencv配置+问题:During startup program exited with code 0xc0000135.
  5. 苹果账号调查事件始末,Apple审核流程或有变
  6. Cheat Engine逆向修改植物大战僵尸(外挂)
  7. 微信客服消息群发 php,利用客服消息和模板消息实现微信群发(突破群发接口的上限)...
  8. 联邦学习:加密算法Paillier,Affine,IterativeAffine
  9. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学计算机工程专业大学排名
  10. Duplicate Cleaner Pro(电脑重复文件清理软件)官方中文版V5.15.0 | 重复文件查找王下载