【网络安全带你练爬虫-100练】第2练:爬取指定位置数据

news2024/10/5 12:59:50

目录

一、思路

二、工具

三、代码处理

第一部分:发起请求+接收响应(不过多讲)

第二部分:解析HTML页面+提取数据

第三部分:处理数据


一、思路

分解步骤,化繁为简

爬虫分为五步走:

  • 发起HTTP请求:爬虫使用HTTP协议向目标网址发送请求,请求获取特定的HTML页面。这可以通过使用编程语言中的HTTP库(例如Python中的requests库)来实现。

  • 接收HTTP响应:目标服务器接收到请求后,将返回一个HTTP响应。该响应包含了所请求的HTML页面内容。

  • 解析HTML页面:爬虫需要解析HTML页面以提取所需的数据。这可以通过使用HTML解析库(例如Python中的Beautiful Soup库或lxml库)来实现。

  • 提取数据:一旦HTML页面被解析,爬虫可以根据特定的选择器或XPath表达式来提取所需的数据。这些选择器或表达式可以帮助定位和提取HTML页面中的元素,如标题、链接、文本等。

  • 处理数据:在提取数据后,爬虫可以对数据进行进一步处理、清洗或存储,以便后续分析或展示。



二、工具

解析数据的工具:如xpath、Beautiful Soup、正则表达式等很多

1、安装Beautiful Soup

是 Python 的一个第三方库,可以用来解析网页数据

pip3 install beautifulsoup4

官方文档:https://beautifulsoup.readthedocs.io/zh_CN/latest/

2、安装 lxml

lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式

pip3 install lxml



三、代码处理

第一部分:发起请求+接收响应(不过多讲)

import requests

if __name__ == '__main__':
    url1="https://beautifulsoup.readthedocs.io/zh_CN/latest/"
    req=requests.get(url=url1)
    req.encoding='utf-8'
    print(req.text)


第二部分:解析HTML页面+提取数据

我们关心的数据都在标签里面

<div class="section" id="id7">

div 标签的属性有class、id

属性值分别为:section、id7

import requests
from bs4 import BeautifulSoup

if __name__ == '__main__':
    url = "https://beautifulsoup.readthedocs.io/zh_CN/latest/"
    req = requests.get(url)
    req.encoding = 'utf-8'
    html = req.text  # 将获取到的网页内容保存到变量html中
    bs = BeautifulSoup(html, 'lxml')
    text = bs.find('div',id="id7")
    print(text)


第三部分:处理数据

(1)做到所有最小单位的数据所在的上一级标签

(2)找到每个最小单位的数据所处的同一级标签

 (3)分析最小单位标签内的详细信息所在标签


(4)完整代码:

(为了方便大家一步一步来,很多地方没最优化)


import re
import requests
from bs4 import BeautifulSoup

def get_TYC_info():
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36'}
    html = get_page(TYC_url)
    soup = BeautifulSoup(html, 'lxml')
    GS_list = soup.find('div', attrs={'class': 'index_list-wrap___axcs'})
    GS_items = GS_list.find_all('div', attrs={'class': 'index_search-box__7YVh6'})
    for item in GS_items:
        title = item.a.text.replace(item.a.span.text, "")
        link = item.a['href']
        company_type = item.find('div', attrs={'class': 'index_tag-list__wePh_'}).find_all('div', attrs={'class': 'index_tag-common__edIee'})[0].text
        money = item.find('div', attrs={'class': 'index_info-col__UVcZb index_narrow__QeZfV'}).span.text

        print(title.strip())
        print(link)
        print(company_type)
        print(money)

def get_page(url):
    try:
        headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36'}
        response = requests.get(url, headers=headers, timeout=10)
        return response.text
    except:
        return ""


if __name__ == '__main__':
    TYC_url = "https://www.tianyancha.com/search?key=&base=hub&city=wuhan&cacheCode=00420100V2020&sessionNo=1688108233.45545222"
    get_TYC_info()

结果如图:


(5)逐行解释

1、导入了需要使用的模块:re用于正则表达式操作,requests用于发送HTTP请求,BeautifulSoup用于解析HTML。

import re

import requests

from bs4 import BeautifulSoup

 

2、自定义一个函数get_TYC_info(),用于获取天眼查(TYC)的信息

def get_TYC_info():

 

3、定义了请求头(headers),以模拟浏览器发送请求。

headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36'}

 

4、调用自定义的get_page()函数,将TYC_url作为参数传递给它,并将返回的HTML内容赋值给变量html

html = get_page(TYC_url)
 

5、使用BeautifulSoup模块解析HTML,创建一个BeautifulSoup对象soup,参数'lxml'表示使用lxml解析器。

soup = BeautifulSoup(html, 'lxml')

 

6、从解析后的HTML中找到class属性为index_list-wrap___axcs的div元素,并将其赋值给变量GS_list

GS_list = soup.find('div', attrs={'class': 'index_list-wrap___axcs'})

 

7、从GS_list中找到class属性为index_search-box__7YVh6的所有div元素,并将它们存储在列表GS_items

GS_items = GS_list.find_all('div', attrs={'class': 'index_search-box__7YVh6'})

8、遍历GS_items列表,对于每个元素,提取标题、链接、公司类型和金额信息,并打印输出。其中,title通过替换掉item.a下的span标签内的文本为空字符串来获得。linkitem.a标签的href属性值。company_type通过在item内进行查找,找到class属性为index_tag-list__wePh_的div元素,然后在这个div元素下的所有class属性为index_tag-common__edIee的div元素中获取第一个元素的文本内容。money通过在item内进行查找,找到class属性为index_info-col__UVcZb index_narrow__QeZfV的div元素,然后获取其中的span标签的文本内容。

for item in GS_items: title = item.a.text.replace(item.a.span.text, "") 
    link = item.a['href']
    company_type = item.find('div', attrs={'class': 'index_tag-list__wePh_'}).find_all('div', attrs={'class': 'index_tag-common__edIee'})[0].text 
    money = item.find('div', attrs={'class': 'index_info-col__UVcZb index_narrow__QeZfV'}).span.text print(title.strip()) 

    print(link) 
    print(company_type) 
    print(money)

 

9、自定义了一个名为get_page()的函数,用于发送HTTP请求并返回响应的HTML内容。

def get_page(url):

 

10、在get_page()函数内部,首先定义了请求头(headers),然后使用requests模块发送GET请求,传递URL和请求头,并设置超时时间为10秒。如果请求成功,返回响应的HTML内容;如果出现异常,则返回

    try:
        headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36'}
        response = requests.get(url, headers=headers, timeout=10)
        return response.text
    except:
        return ""

11、入口程序

if __name__ == '__main__':
    TYC_url = "https://www.tianyancha.com/search?key=&base=hub&city=wuhan&cacheCode=00420100V2020&sessionNo=1688108233.45545222"
    get_TYC_info()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/719720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

极智项目 | 实战TensorRT部署DETR

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文来介绍 实战TensorRT部署DETR。 本文介绍的实战 TensorRT 部署 DETR&#xff0c;提供完整的可以一键执行的项目工程源码&#xff0c;获取方式有两个&#xff…

淘宝APP商品详情接口(商品信息,价格销量,优惠券信息,详情图等)

淘宝APP商品详情接口&#xff08;商品信息接口&#xff0c;价格销量接口&#xff0c;优惠券信息接口&#xff0c;详情图接口等&#xff09;代码对接如下&#xff1a; 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;&#xff…

java jvm什么是记忆集,卡表?

记忆集 &#xff1a; 是一种用于记录 从非收集区域指向收集区域的指针集合的抽象数据结构 。如果我们不考虑 效率和成本的话&#xff0c;最简单的实现可以用非收集区域中所有含跨代引用的对象数组来实现这个数据结 构 记忆集作用 &#xff1a;解决对象跨代引用所带来的问题&a…

Rdkit|分子输出

Rdkit|分子输出 Github&#xff1a; 地址 输出SMILES/SMARTS 输出SMILES&#xff1a;MolToSmiles(mol, isomericSmiles, kekuleSmiles, canonical, …) kekuleSmiles&#xff1a;默认False&#xff0c;不使用kekule时&#xff1a;脂肪族碳用"C"表示&#xff08;大…

分布式运用——rsync远程同步

一、rsync的背景和原理 rsync&#xff08;Remote Sync&#xff0c;远程同步&#xff09;是由Andrew Tridgell于1996年开发的一款开源软件。 是一个开源的快速备份工具&#xff0c;可以在不同主机之间镜像同步整个目录树&#xff0c;支持增量备份&#xff0c;并保持链接和权限&a…

笔试强训第33天

目录 剪花布条 客似云来 剪花布条 #include <iostream> #include <string>using namespace std;int main() {string s,t;while(cin>>s>>t){int ans 0;while(s.find(t) ! string::npos){s.erase(s.find(t), t.size());ans;}cout<<ans<<en…

Codeforces Round 877 (Div. 2) A-E

题目链接&#xff1a;Dashboard - Codeforces Round 877 (Div. 2) - Codeforces A - Blackboard List 解题思路&#xff1a;因为取的是绝对值&#xff0c;所以有负数肯定取负数&#xff0c;没负数就取最大值。 #include <bits/stdc.h> using namespace std; const int…

基于PyQt5的桌面图像调试仿真平台开发(7)伽马矫正

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

小程序的剪贴板 实现复制文本功能

小程序的剪贴板 实现复制文本功能 wx.setClipboardData wx.setClipboardData() 设置系统剪贴板的内容。调用成功后&#xff0c;会弹出 toast 提示"内容已复制"&#xff0c;持续 1.5s Promise 风格 调用&#xff1a;支持微信 Windows 版&#xff1a;支持微信 Mac 版&…

Mac电脑如何与 Windows 用户共享文件?

在 Mac 上设置文件共享 选取苹果菜单 >“系统偏好设置”&#xff0c;然后点按“共享”。 选择“文件共享”复选框&#xff0c;然后点按“选项”。 选择“使用 SMB 来共享文件和文件夹”复选框。 在“Windows 文件共享”列表中&#xff0c;选择要与 Windows 用户共享文件的…

python语法

1、单行注释&#xff1a;# &#xff0c;多行注释&#xff1a; 2、python采用代码缩进和冒号来区别代码之间的层次 3、每个变量在使用前必须赋值&#xff0c;才会创建内存空间。python是基于值的内存管理&#xff0c;相同值指向同一空间。具有内存自动管理功能。不需要声明类…

亚马逊云科技生成式AI产品入围2023SAIL奖TOP30榜单项目

以“智联世界&#xff0c;生成未来”为主题的2023世界人工智能大会&#xff08;WAIC 2023&#xff09;将于7月6日至8日在上海举行。本次大会将聚焦通用人工智能发展&#xff0c;紧抓生成式人工智能引发的行业热潮&#xff0c;探索未来产业新业态&#xff0c;超前谋划赋能数字经…

安装使用最新Photoshop beta(OpenAI模型)及基本Photoshop beta使用技巧

安装使用最新Photoshop beta 1. 注册Adobe美国地区账号2.下载安装Adobe Creative Cloud工具3.下载Photoshop beta4. 基本Photoshop beta使用技巧 1. 注册Adobe美国地区账号 adobe美国官网&#xff1a;https://www.adobe.com/ 首先我们进入官网注册账号 下面我们输入注册邮箱…

【网络编程】自定义协议+Json序列化与反序列化

文章目录 一、序列化与反序列化概念二、自定义协议设计网络计算机2.1 服务端2.1.1 服务端业务处理流程2.1.2 TCP的发送与接收缓冲区2.1.3 保证读取完整报文2.1.4 自定义协议——序列化与反序列化2.1.4.1 请求2.4.1.2 响应 2.1.5 计算流程2.1.6 在有效载荷前添加长度报头2.1.7 发…

解决vmWare ESXI 7.3报错,客户机操作系统已禁用 CPU。请关闭或重置虚拟机(ESXI使用遇到问题解决记录文持续使用持续更新)

一&#xff1a;分析客户机操作系统已禁用 CPU" 这个错误通常是由以下原因之一引起的&#xff1a; 1. 虚拟机配置不正确&#xff1a;可能是您在虚拟机配置中选择了不受支持的 CPU 类型或功能。某些操作系统可能需要特定的 CPU 功能才能正常运行。如果您的虚拟机配置与操作…

下载【T0】指令微调数据集

T0 benchmark&#xff08;或者叫P3&#xff09;是一个大规模的人工标注instruction tuning数据集&#xff0c;在ICLR 2021 T0一文中提出&#xff0c;其收集了来自huggingface hub上的多任务数据&#xff0c;并为每一个task都装备了来自prompt source的人工撰写指令。 P3数据集…

9、DataX安装部署

1、 DataX简介 1.1 DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/…

基于高校图书馆的用户画像、可视化、模型预测、推荐算法项目实现

需要本项目的可以私信博主获取源码及项目&#xff01;&#xff01;&#xff01; 本研究基于高校图书馆的借阅信息、馆藏图书信息、读者入馆信息、用户信息等多维度的数据表&#xff0c;首先将不同年份的数据拼接在一起&#xff0c;按照时间维度进行整合&#xff0c;并保证数据…

快慢指针专题

总体思想&#xff1a;详解为什么用一步两步快慢指针&#xff1f;三步四步可以吗 - 预言2018 - 博客园 (cnblogs.com) 1. 为什么快慢指针一定会相遇&#xff1a; 2. 为什么 quick 指针每次走两步&#xff0c;而不是3、4步骤&#xff0c;是因为 如上图所示&#xff0c;若走2步&a…

TDsql增量merge导入load_data

TDsql增量merge导入load_data 项目组最近用了腾讯的TencentDB分布式数据库作为传统关系型数据库来保存少量应用数据。因此需要开发相对应的ETL功能代码&#xff0c;根据新数据库特性&#xff0c;使用自带的工具load_data作为导入的工具 准备表 使用load_data导入的表&#xf…