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.pswp.cn/news/455342.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455342.shtml
英文地址,請注明出處:http://en.pswp.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 …