利用python加selenium模拟浏览器爬取百度爱企查企业详细信息

说明

本人不是什么爬虫大佬,只是最近在做一个项目的时候需要根据企业的名称把企业的信息爬取下来,例如营业执照、工商注册号等。在网上找了很多的信息与资源,都不是很符合我们的需求,是一种比较低频的爬虫需求,最开始是在企查查上面做的爬虫,但是这个平台经常需要登录,造成我们经常访问失败(其实也是楼主不会在爬虫的时候绕过登录😂)。
后来就在百度的爱企查平台进行爬虫,毕竟大平台,对我们这种低频的爬虫容忍很大,目前为止没有产生需要登陆的情况。刚开始参考了一篇CSDN博客

这篇文章爬取到的是搜索到的企业列表,获取到的是列表里面的一些简单信息,并不能获取到企业的更详细的信息,例如工商注册号等,后来自己在这个基础上进行了改进,可以爬取到所有的信息了
以苏宁为例,文章爬取的列表信息:
企业列表信息
点进列表的第一条之后获取到的详细信息:
在这里插入图片描述
而我们需要的也是工商注册这一块的详细信息,下面讲解怎么获取到这些信息。

企查查网页构成方式

网页链接方式:
大家可以去查看一下上面csdn博客的内容,公司的列表信息里每一项都带着一个pid参数,表示当前公司的访问id

https://aiqicha.baidu.com/company_detail_65922533325239

后面的65922533325239就是搜索列表第一条所对应的访问链接。通过这样的方式构建链接查看企业信息详情。
打开页面之后,我们可以看到在谷歌浏览器的源码页面对应的信息是查看不到的,也就是说网页时通过js动态生成的,网页源码里不包含界面的主要信息,因此通过简单的解析源码不能获取得到数据。
网页sources源码:
在这里插入图片描述
但是通过谷歌浏览器的Elements发现,对应的元素与值又显示出来了:
在这里插入图片描述
通过Python常规的网页访问方式如requets是不能获取到Elements对象的信息的,其实我也不太懂这里是什么意思,好像是由于没有加载网页?为了模拟浏览器登录获取到同样的信息,百去网上搜索之后采用PhantomJS模拟浏览器登录,这样就可以获取到我们需要的信息了,话不多说,直接看代码吧。

代码与详解

总结一下爬爬取企业信息的流程
1.先在企查查的主页搜索公司信息,获得搜索结果列表(公司名称可能相近,因此会得到很多相似的公司名搜索结果),这里我只取了搜索的第一个结果,在代码里也会注明。
2.根据搜索列表的pid参数构建点进去的得到公司的详情页面的链接
3.使用PhantomJS模拟浏览器直接访问详情页面
4,解析详情页面的标签,获取到需要爬取得数据

# -*- coding:utf-8 -*-
#爬虫获取企业工商注册信息

from selenium import webdriver
import requests
import re
import json
import os

headers = {'User-Agent': 'Chrome/76.0.3809.132'}

#需要安装phantomjs,然后将phantomjs.exe路径指定到path
path = os.path.join(os.getcwd(), 'static', 'phantomjs', 'phantomjs.exe')
# print(path)
# 正则表达式提取数据
re_get_js = re.compile(r'<script>([\s\S]*?)</script>')
re_resultList = re.compile(r'"resultList":(\[{.+?}\]),"totalNumFound')
has_statement = False


def get_company_info(name):
    '''
        @func: 通过百度企业信用查询企业基本信息
    '''
    url = 'https://aiqicha.baidu.com/s?q=%s' % name
    res = requests.get(url, headers=headers)
    if res.status_code == 200:
        html = res.text
        js = re_get_js.findall(html)[1]
        data = re_resultList.search(js)
        if not data:
            return
        company = json.loads(data.group(1))[0]
        url = 'https://aiqicha.baidu.com/company_detail_{}'.format(company['pid'])

        # 调用环境变量指定的PhantomJS浏览器创建浏览器对象
        driver = webdriver.PhantomJS(path)
        driver.set_window_size(1366, 768)
        driver.get(url)

        # 获取页面名为wraper的id标签的文本内容
        data = driver.find_element_by_class_name('zx-detail-basic-table').text
        data = data.split()
        data_return = {}
        need_info = ['法定代表人', '经营状态', '注册资本', '实缴资本', '曾用名', '所属行业', '统一社会信用代码', '纳税人识别号', '工商注册号', '组织机构代码', '登记机关',
                     '成立日期', '企业类型', '营业期限', '审核/年检日期', '注册地址', '经营范围']
        for epoch, item in enumerate(data):
            if item in need_info:
                if data[epoch + 1] in need_info or data[epoch + 1] == '-':
                    data_return[item] = None
                    continue
                if item == '法定代表人':
                    if len(data[epoch + 1]) == 1:
                        data_return[item] = data[epoch + 2]
                    else:
                        data_return[item] = data[epoch + 1]
                    pass
                elif item == '营业期限':
                    if data[epoch + 2] == '至':
                        data_return[item] = data[epoch + 1] + ' ' + data[epoch + 2] + ' ' + data[epoch + 3]
                else:
                    data_return[item] = data[epoch + 1]
        return data_return
    else:
        print('无法获取%s的企业信息' % name)


# get_company_info('江苏苏宁')

需要提前安装好phantomjs,这是一个无界面浏览器,大家可以资讯百度,将phantomjs.exe得路径指定到path就可以了
讲的不是很详细,但是结构比较简单,大家可以直接逐步打印信息查看爬虫过程,还是比较简单的。
这样的爬虫比较慢,一次爬虫大概5-10s,不过胜在稳定,用了这么久几乎没有出过问题。
喜欢的请一键三联👍
[1]: https://blog.csdn.net/qq_35408030/article/details/107068115

  • 24
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
好的,以下是使用selenium模拟浏览器爬取京东商品评价的代码: ```python from selenium import webdriver from selenium.webdriver.common.keys import Keys from time import sleep # 创建一个浏览器对象 browser = webdriver.Chrome() # 访问京东首页 browser.get('https://www.jd.com/') # 查找搜索框并输入要搜索的商品名称 search_box = browser.find_element_by_id('key') search_box.send_keys('手机') search_box.send_keys(Keys.ENTER) # 等待搜索结果页面载完成 sleep(3) # 找到商品列表中第一个商品的链接并点击进入商品详情页 product_link = browser.find_element_by_css_selector('.gl-item:nth-child(1) .p-name a') product_link.click() # 切换到新打开的标签页 browser.switch_to.window(browser.window_handles[-1]) # 进入商品评价页面 browser.find_element_by_css_selector('#detail .comment-count').click() # 模拟滚动载评价数据 while True: browser.execute_script('window.scrollTo(0, document.body.scrollHeight)') sleep(3) try: # 找到“查看更多”的按钮并点击 more_button = browser.find_element_by_css_selector('.comment-item .comment-operate .btn-append') more_button.click() sleep(3) except: # 没有“查看更多”按钮,说明评价数据已全部载完成 break # 找到所有评价的元素 comments = browser.find_elements_by_css_selector('.comment-item') # 遍历所有评价并输出评价内容 for comment in comments: content = comment.find_element_by_css_selector('.comment-con').text.strip() print(content) # 关闭浏览器 browser.quit() ``` 上面的代码中,我们首先使用`selenium`创建一个`Chrome`浏览器对象,并访问京东首页。然后,我们在搜索框中输入要搜索的商品名称,按下`Enter`键进行搜索。搜索结果页面载完成后,我们找到商品列表中第一个商品的链接,并点击进入商品详情页。切换到新打开的标签页后,我们进入商品评价页面,然后模拟滚动载评价数据,并在评价数据全部载完成后,找到所有评价的元素,遍历所有评价并输出评价内容。最后,关闭浏览器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值