首页 > 编程语言 >Python爬虫实战系列4:天眼查公司工商信息采集

Python爬虫实战系列4:天眼查公司工商信息采集

时间:2024-03-20 10:04:09浏览次数:23  
标签:天眼 Python 22% 爬虫 session cookie 页面 com 请求

Python爬虫实战系列1:博客园cnblogs热门新闻采集
Python爬虫实战系列2:虎嗅网24小时热门新闻采集
Python爬虫实战系列3:今日BBNews编程新闻采集
Python爬虫实战系列4:天眼查公司工商信息采集

一、分析页面

打开天眼查网址 https://www.tianyancha.com/ ,随便搜索一个公司【比亚迪】
在这里插入图片描述
查看地址栏URL变化,由https://www.tianyancha.com变成https://www.tianyancha.com/search?key=比亚迪&sessionNo=1710895900.05751652

然后分析cookie情况,当不登陆,直接访问首页https://www.tianyancha.com时,网站会自动生成一堆cookie
在这里插入图片描述
接下来查看公司详情页面,每个公司详情页都会有天眼查自己的公司id拼接出来的URL

例如:https://www.tianyancha.com/company/11807506
在这里插入图片描述
这个详情页面就是我们真正需要数据的页面

1.1、分析请求

开始分析请求,F12打开开发者模式,点击Network,然后刷新页面
在这里插入图片描述
由于公司详情页都是新标签页打开的,所以请求地址也就是当前页面地址https://www.tianyancha.com/company/11807506并且该请求Response的是HTML源码,我们只需要分析该HTML代码解析处理数据即可。
在这里插入图片描述
右键请求=》copy curl=》
在这里插入图片描述
curl代码如下

curl 'https://www.tianyancha.com/company/11807506' \
  -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8' \
  -H 'Accept-Language: zh-CN,zh;q=0.5' \
  -H 'Cache-Control: max-age=0' \
  -H 'Connection: keep-alive' \
  -H 'Cookie: HWWAFSESID=887e67d267788860d6c; HWWAFSESTIME=1710896046122; csrfToken=lvLMtLSm9xmfByFFdDTlcT4s; TYCID=5d1c2130e65411ee9a9db554e7c53ded; CUID=5c33b832f027276cc2e6ab5cee5b1d8b; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2218e5959f4c817-057ed755c136264-1d525637-855961-18e5959f4c913dd%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThlNTk1OWY0YzgxNy0wNTdlZDc1NWMxMzYyNjQtMWQ1MjU2MzctODU1OTYxLTE4ZTU5NTlmNGM5MTNkZCJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218e5959f4c817-057ed755c136264-1d525637-855961-18e5959f4c913dd%22%7D; sajssdk_2015_cross_new_user=1; bannerFlag=true; searchSessionId=1710896089.33230042' \
  -H 'Referer: https://www.tianyancha.com/search?key=%E6%AF%94%E4%BA%9A%E8%BF%AA&sessionNo=1710896089.33230042' \
  -H 'Sec-Fetch-Dest: document' \
  -H 'Sec-Fetch-Mode: navigate' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'Sec-Fetch-User: ?1' \
  -H 'Sec-GPC: 1' \
  -H 'Upgrade-Insecure-Requests: 1' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Brave";v="122"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"'

然后逐个测试哪些是请求必要参数

大部分情况下,一个请求必要参数是如下这些

  1. User-Agent:标识发送请求的客户端
  2. Content-Type:内容类型
  3. cookie或者Authorization

所以可以删除不必要参数进行测试,经过测试,其他不重要参数可以删除,但是删除cookie不可行,说明接口需要cookie信息

但是这个cookie怎么来的呢?

还记得上面说过,我们观察得到当我们访问首页时会自动注入一些cookie吗?

我们截止目前也没有登录,所以直接对比首页cookie和详情页cookie是否有区别即可。

分析结论:

  1. 详情页面请求需要cookie信息,但是该cookie可以从首页获取到
  2. 详情页面有反爬策略,同ip多次访问会提示需要登录,但是一个ip第一次请求时无需登录也可以请求到结果

二、代码实现

分析完请求后,我们开始代码实现,由于需要先从访问一次首页后拿到cookie才能再请求详情页

所以我们采用Python的requests的session功能,利用该session发起get和post请求,这样每次session发起请求时都会携带cookie,那我们只需要在获取session前先请求一次首页即可。


def new_session():
    """
    获取session
    :return:
    """
    session = requests.session()
    while True:
        try:
            session.get(url='https://www.tianyancha.com', headers=headers, timeout=(2, 2), proxies=proxies)
            return session
        except Exception as e:
            Print.print("异常,重试...", e)
            update_proxies()

注意这里我演示使用了代理proxies,当出现异常无法访问时需要更新一下代理update_proxies()

拿到session后就可以请求详情页面了

def get_co_detail(url):
    """
    公司详情
    :param url:
    :return:
    """
    session = new_session()
    response = session.get(url=url, headers=headers, timeout=(2, 2), proxies=proxies)
    restext = response.content.decode('utf-8', errors='ignore')

    tree = etree.HTML(restext)
    title = str(tree.xpath('//title/text()'))
    # 公司名称
    coName = tree.xpath("//h1[@class='index_company-name__LqKlo']/text()")

注意详情页面这里是先获取session,然后get请求时同样增加代理

本次学习演示只获取页面中的公司名称信息,如需请求信息可自行分析页面源码然后xpath获取

总结

  1. 分析请求时多注意cookie信息,分析cookie是后端生成还是前端js生成
  2. 如遇需要携带cookie请求时,可以采用requests.session()创建一个session来请求

本文章代码只做学习交流使用,作者不负责任何由此引起的任何法律责任。

由于信息安全问题,这里不放源码。

各位看官,如对你有帮助欢迎点赞,收藏,转发,关注公众号【Python魔法师】获取更多Python魔法~

qrcode.jpg

标签:天眼,Python,22%,爬虫,session,cookie,页面,com,请求
From: https://www.cnblogs.com/meet/p/18084555

相关文章

  • 100_pandas-Python的数据分析包
    目录什么是pandas索引操作赋值和排序算术运算和逻辑运算统计运算自定义函数运算pandas画图文件读取和存储缺失值处理-删除/替换数据离散化数据合并交叉表和透视表分组和聚合什么是pandas索引操作赋值和排序算术运算和逻辑运算统计运算自定义函数运算pandas画图文......
  • 090_Numpy-Python的科学计算库
    目录什么是NumpyN维数组-ndarrayndarray与Python原生list运算效率对比生成数组正态分布和均匀分布切片和形状修改类型修改和数组去重ndarray运算矩阵和向量矩阵向量加法和标量乘法矩阵向量乘法矩阵乘法矩阵乘法的性质逆、转置数组间运算什么是NumpyN维数组-ndarrayndarray......
  • 080_Matplotlib-Python的2D绘图库
    目录什么是Matplotlib为什么要学习Matplotlib实现一个简单的Matplotlib画图创建画布-》绘制图像-》显示图像Matplotlib三层结构容器层辅助显示层图像层折线图与基础绘图功能折线图的应用场景常见图形绘制常见图形种类及意义折线图-变化散点图-分布规律柱状图-统计/对比直方图-统计......
  • 【python】flask服务端响应与重定向处理
    ✨✨欢迎大家来到景天科技苑✨✨......
  • Python:编程语言之魅力
    Python,这门诞生于1991年的高级编程语言,由GuidovanRossum创造,如今已成为编程界的一颗璀璨明星。从Web开发到数据分析,从人工智能到科学计算,Python的身影无处不在。它的简洁、易读、可扩展性,以及强大的第三方库支持,使得无数开发者为之倾倒。本文将从Python的历史背景、语言特性......
  • Python基础----冒泡排序和二分查找(持续更新中)
    冒泡排序(共3个版本)在冒泡排序中,一共有3个版本,经常使用的是v3.0,v3.0版本的精彩之处就在于b=false和b=true只要把这点搞懂,那么冒泡排序就没什么难的!!!li=[5,4,7,8,2,1]#冒泡排序的v1.0版本forjinrange(len(li)-1):foriinrange(len(li)-1):......
  • python 循环语句
    真值表|对象/常量|值||-----------|----------||True|True||False|False||0|False||0.0|False||None|False||[]|False||()|False||""|False......
  • 爬虫实战:从HTTP请求获取数据解析社区
    在过去的实践中,我们通常通过爬取HTML网页来解析并提取所需数据,然而这只是一种方法。另一种更为直接的方式是通过发送HTTP请求来获取数据。考虑到大多数常见服务商的数据都是通过HTTP接口封装的,因此我们今天的讨论主题是如何通过调用接口来获取所需数据。目前来看,大多数的http接口......
  • python
    importpandasaspdfromkmodes.kmodesimportKModes#读取csv文件data=pd.read_csv('ma1.csv')#数据预处理,将相关列合并为乘车满意度和其他满意度data['乘车满意度']=data[['售票服务','候车服务','乘车服务','下车服务']].sum(axis=1)data['其......
  • 3 python的数值在内存中如何存储
    python的数值在内存中如何存储 在Python中,数值在内存中的存储方式取决于数值的类型和大小,以及Python的版本。Python使用固定的字节数来表示整数类型,并且对于浮点数,通常使用双精度(64位)或者扩展精度(128位)的浮点表示。整数的存储方式:对于较小的整数,Python通常使用一个机器字长......