Rastrear los datos de la empresa de la biblioteca de la cadena de Zhita a través de selenium_20200526_ de python

Rastrear los datos de la empresa de la biblioteca de cadenas de Zhita a través del selenio de Python.
Este artículo encuentra un problema típico y común de que el código fuente de una página web es código. Este tipo de código fuente de la página web no puede leer directamente la información, pero el navegador puede manipularse para convertir el código en información valiosa, y luego la información se puede leer a través de xpath y html.etree.
En particular, debe tenerse en cuenta que debe establecer un cierto tiempo de suspensión después de leer y abrir la página web antes de leer el código fuente de la página web, de lo contrario, los datos leídos pueden estar vacíos, como:
self.browser.get (self.url) # access
time.sleep (2) # Retraso 5 segundos, esta declaración es muy importante

from selenium import webdriver  # 导入selenium自动化测试模块
from lxml import html  # 导入xpath解析模块
import time # 导入时间模块
etree = html.etree # 实例化etree
from selenium.webdriver.chrome.options import Options
import pandas as pd
import os

class BlockData():
    """爬虫连塔智库"""
    def __init__(self):
        os.chdir('F:\python工作环境\python\代码运行文件夹\学习笔记\网络爬虫')
        ch_op = Options()# 创建一个参数对象,用来控制chrome以无界面模式打开
        ch_op.add_argument('--headless')# 设置谷歌浏览器的页面无可视化
        ch_op.add_argument('--disable-gpu')
        ch_op.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
        self.browser = webdriver.Chrome(chrome_options=ch_op)  # 创建chrome浏览器控制器,
        self.browser.implicitly_wait(10)  # 隐式等待:在查找所有元素时,如果尚未被加载,则等10秒
        self.info_s = []  # 公司信息
        self.error = 0  # 出错次数
        self.base_url = 'http://www.blockdata.club/site/company?page='  # 获取要访问的url

    def get_html(self):
        """获得单个网页数据"""
        self.browser.get(self.url)  # 进行访问
        time.sleep(2)  # 延迟5秒,此语句非常重要,务必将此语句放置于browser.get(self.url)和text_s = browser.page_source之间
        #否则有可能由于网页反应速度慢,造成读取空值
        text_s = self.browser.page_source  # 将获取的页面转化成text类型,
        # print(text_s)此时仍然是纯粹代码文本,不包含信息
        self.text_s=text_s

    def get_info(self):
        """解析网页并从其中获得数据"""
        # 通过xpath将代码文本转化为包含信息的字符串
        tree = etree.HTML(self.text_s)  # 实例化xpath
        uls = tree.xpath('//div[@id="enterpriseList"]/ul')  # 进行第一次解析,获取

        # 将单页所有公司信息收集
        for ul in uls:
            try:
                company = ul.xpath('a/li[@class="enterprise_One"]//text()')[0]  # 公司名称,使用a/li//text()可以直接获取li中的文本
                location = ul.xpath('a/li[@class="enterprise_Two"]//text()')[0]  # 所在省份
                commander = ul.xpath('a/li[@class="enterprise_Ser"]//text()')[0]  # 经理
                money = ul.xpath('a/li[@class="enterprise_Four"]//text()')[0]  # 注册资本
                date = ul.xpath('a/li[@class="enterprise_Five"]//text()')[0]  # 成立日期
                type = ul.xpath('a/li[@class="enterprise_Six"]//text()')[0]  # 公司性质
                self.info_s.append([company, location, commander, money, date, type])
            except:
                self.error += 1
                continue

    def spec_pages(self,pages):
        """指定要爬取的页数,输入页数"""
        for page in range(1,pages+1):
            try:
                self.url=self.base_url+str(page)
                self.get_html()
                self.get_info()
                print('已经完成'+str(round(page/pages,2)*100)+'%')
            except:
                continue

    def to_excel(self):
        """将爬取的数据保存至EXCEL"""
        data=pd.DataFrame(self.info_s)
        data.to_excel('data.xlsx')

if __name__=='__main__':
    block_data=BlockData()
    block_data.spec_pages(100)
    block_data.to_excel()

Supongo que te gusta

Origin blog.csdn.net/weixin_45590329/article/details/106358488
Recomendado
Clasificación