Python爬蟲:無賬號無限制獲取企查查信息

通過網(wǎng)上爬蟲獲取了全國所有企業(yè)睹簇,然后就需要補充企業(yè)信息,首先想到的就是企查查柜某,啟信寶等專業(yè)網(wǎng)站,最終選擇了企查查翰绊,嘗試了多種方法:

1、selenium爬蟲刽肠,繞過企查查的登錄驗證溃肪,但賬號和IP限制太大,最終放棄

2、通過requests直接請求+cookies惶傻,遇到了cookie有效期和限制問題

不斷的嘗試和修改參數(shù),最終發(fā)現(xiàn)一種有效方式selenium + wep

只需要IP代理汽抚,不需要賬號,沒有限制伯病,因為是沒有登錄造烁,拿到的信息有限,能展示的都能獲取午笛。

image

一惭蟋、初始化selenium

sysstr = platform.system()

if(sysstr =="Windows"):
    chromedriver_path = os.getcwd() + "\\utools\\chromedriver.exe"
else: #mac
    chromedriver_path = os.getcwd() + "/mac_chromedriver"

logger.info("chromedriver_path: %s" %(chromedriver_path,))

default_agent = '--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"'


class wap_QiChaCha(object):
    def __init__(self, user_agent_header=default_agent, chromedriver_path=chromedriver_path):
        self.options = webdriver.ChromeOptions()  # 創(chuàng)建一個配置對象
        self.options.add_argument('--no-sandbox')
        self.options.add_argument('--disable-dev-shm-usage')
        self.options.add_argument('--proxy-server=http://47.98.154.206:3008')
        self.options.add_argument("--headless") # 開啟無界面模式cd
        self.options.add_argument("--disable-gpu")  # 可選項:禁用gpu,可以解決一些莫名的問題
        self.options.add_argument(user_agent_header)
        mobileEmulation = {'deviceName': 'iPhone X'}
        self.options.add_experimental_option('mobileEmulation', mobileEmulation)


    def init(self):
        self.driver = webdriver.Chrome(executable_path=chromedriver_path, chrome_options=self.options)

        # 打開登錄頁面
        self.driver.get('https://m.qichacha.com/')
        self.error_encounter = 0

二药磺、判斷公司存在

  def search_company(self, company_name):
        #time.sleep(0.3)

        try:
            result = {}

            result[COMPANY.NAME] = utils.normalizeCompanyName(company_name)

            logger.info("search for: %s" %(company_name,))

            '''
            self.driver.get('https://m.qichacha.com/')

            self.driver.find_element_by_id('searchkey').send_keys(company_name)
            # 單擊搜索按鈕
            srh_btn = self.driver.find_element_by_xpath('//*[@id="V3_Index_S"]//span')
            srh_btn.click()
            '''

            self.driver.get('https://m.qcc.com/search?key=%s' %(company_name))

            utils.alertWait(WebDriverWait(self.driver, 3).until,
                            expected_conditions.presence_of_element_located(
                                (By.XPATH, '//*[contains(@class,"text-danger") or contains(@class,"nodata")]')), 5, 0,
                                    "not found text-danger or nodata")

            # 檢測企業(yè)是不是存在
            inc_full = self.driver.find_element_by_xpath('//*[@class="text-danger"]').text

            self.error_encounter = 0

            if inc_full == "0":
                logger.error("company %s not found" %(company_name,))
                return None

            # 獲取首個企業(yè)文本
            cname = self.driver.find_element_by_xpath('//div[@class="list-item-name"]').text
            href = self.driver.find_element_by_xpath('//a[@class="a-decoration"]').get_attribute("href")

            # 曾用名
            cym = None
            try:
                stock_or_others = self.driver.find_element_by_xpath('//div[@class="list-item-bottom"]').text
                # print(stock_or_others)
                # 稱呼不同:曾用名 或 歷史股東等
                if utils.normalizeCompanyName(company_name) in stock_or_others:
                    company_bottom = stock_or_others.replace(":", ":")
                    cym = company_bottom.split(":")[1]
            except:
                # 獲取下面顯示失敗
                pass

            if utils.normalizeCompanyName(cname) == utils.normalizeCompanyName(company_name) \
                    or utils.normalizeCompanyName(cym) == utils.normalizeCompanyName(company_name):
                result[COMPANY.URL] = href

                # time.sleep(0.2)
                return self.company_detail(href, result)

        except Exception as err:
            # self.driver.delete_all_cookies()
            logger.error(err)
            self.error_encounter = self.error_encounter + 1
            if self.error_encounter >= 3:
                self.driver.quit()
                self.init()

            return None
        finally:
            pass
image

三告组、獲取公司信息

 def company_detail(self, href, result):

        self.driver.get(href)

        utils.alertWait(WebDriverWait(self.driver, 3).until,
                        expected_conditions.presence_of_element_located((By.XPATH, '//*[@class="company-name"]')), 5, 0,
                        "not found text-danger")

        try:
            phone = self.driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[3]/a[1]').text
            if phone and len(phone) > 0:
                result[COMPANY.TEL] = phone.strip()
        except Exception as e:
            pass
            # logger.info("沒有手機號")

        try:
            email = self.driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[3]/a[2]').text
            if email and len(email) > 0:
                result[COMPANY.EMAIL] = email.strip()
        except Exception as e:
            pass
            # logger.info("沒有郵箱")

        try:
            address = self.driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[4]').text
            if address and len(address) > 0:
                result[COMPANY.ADDRESS] = address.strip()
        except Exception as e:
            pass
            # logger.info("沒有地址")

        try:
            infos = self.driver.find_element_by_xpath('//div[@class="basic-wrap"]/table')
            # infos = self.driver.find_element_by_xpath('//*[@id="Cominfo"]/table')
        except:
            return result


        result[COMPANY.TAX_LEVEL] = "稅務(wù)等級&&"
        try:
            taxcreditlist = self.driver.find_element_by_xpath('//div[@id="taxcreditlist"]').text
            info = str(taxcreditlist).replace("\n", "&").strip()
            result[COMPANY.TAX_LEVEL] = result[COMPANY.TAX_LEVEL] + info
        except:
            return result

        # 轉(zhuǎn)為etree
        data = etree.HTML(infos.get_property("innerHTML"))
        data_info = data.xpath('.//tr')

        result[COMPANY.BUSINESS] = "工商信息"
        for info in data_info:
            info_list = info.xpath(".//td//text()")

            new_info_list = []
            for info in list(info_list):
                new_info = str(info).replace("\n", "").strip()
                new_info_list.append(new_info)

            new_info_list = [i for i in new_info_list if i != '']
            self.retrieveInfo(new_info_list, result)

            result[COMPANY.BUSINESS] = result[COMPANY.BUSINESS] + " && " + " && ".join(
                map(str, new_info_list))  # 以 && 分割 連接 list 內(nèi)容

        return result
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市癌佩,隨后出現(xiàn)的幾起案子木缝,更是在濱河造成了極大的恐慌,老刑警劉巖围辙,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件我碟,死亡現(xiàn)場離奇詭異,居然都是意外死亡酌畜,警方通過查閱死者的電腦和手機怎囚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桥胞,“玉大人恳守,你說我怎么就攤上這事》废海” “怎么了催烘?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長缎罢。 經(jīng)常有香客問我伊群,道長,這世上最難降的妖魔是什么策精? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任舰始,我火速辦了婚禮,結(jié)果婚禮上咽袜,老公的妹妹穿的比我還像新娘丸卷。我一直安慰自己,他們只是感情好询刹,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布谜嫉。 她就那樣靜靜地躺著萎坷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沐兰。 梳的紋絲不亂的頭發(fā)上哆档,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音住闯,去河邊找鬼瓜浸。 笑死,一個胖子當著我的面吹牛比原,可吹牛的內(nèi)容都是我干的斟叼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼春寿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忽孽?” 一聲冷哼從身側(cè)響起绑改,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎兄一,沒想到半個月后厘线,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俱病,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡立叛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绪商。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骂束。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡耳璧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出展箱,到底是詐尸還是另有隱情旨枯,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布混驰,位于F島的核電站攀隔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栖榨。R本人自食惡果不足惜昆汹,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婴栽。 院中可真熱鬧满粗,春花似錦、人聲如沸居夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至劫扒,卻和暖如春檬洞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背沟饥。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工添怔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贤旷。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓广料,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幼驶。 傳聞我的和親對象是個殘疾皇子艾杏,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345