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

这篇具有很好参考价值的文章主要介绍了【网络安全带你练爬虫-100练】第2练:爬取指定位置数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、思路

二、工具

三、代码处理

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

第二部分:解析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/

【网络安全带你练爬虫-100练】第2练:爬取指定位置数据,【网络安全-带你练爬虫】,linux,运维,服务器

2、安装 lxml

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

pip3 install lxml

【网络安全带你练爬虫-100练】第2练:爬取指定位置数据,【网络安全-带你练爬虫】,linux,运维,服务器



三、代码处理

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

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

【网络安全带你练爬虫-100练】第2练:爬取指定位置数据,【网络安全-带你练爬虫】,linux,运维,服务器

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)做到所有最小单位的数据所在的上一级标签

【网络安全带你练爬虫-100练】第2练:爬取指定位置数据,【网络安全-带你练爬虫】,linux,运维,服务器

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

【网络安全带你练爬虫-100练】第2练:爬取指定位置数据,【网络安全-带你练爬虫】,linux,运维,服务器

 (3)分析最小单位标签内的详细信息所在标签【网络安全带你练爬虫-100练】第2练:爬取指定位置数据,【网络安全-带你练爬虫】,linux,运维,服务器


(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()

结果如图:【网络安全带你练爬虫-100练】第2练:爬取指定位置数据,【网络安全-带你练爬虫】,linux,运维,服务器


(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()


网络安全小圈子

README.md · 书半生/网络安全知识体系-实战中心 - 码云 - 开源中国 (gitee.com)https://gitee.com/shubansheng/Treasure_knowledge/blob/master/README.md

GitHub - BLACKxZONE/Treasure_knowledgehttps://github.com/BLACKxZONE/Treasure_knowledge文章来源地址https://www.toymoban.com/news/detail-521452.html

到了这里,关于【网络安全带你练爬虫-100练】第2练:爬取指定位置数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络安全带你练爬虫-100练】第14练:文件内容的读取、取出

    目录 一、目标1:把文件内容遍历取出 二、目标2:把文件内容全部取出 三、网络安全O  (1)如果文件脚本在不同目录 (2)如果文件直接和脚本在同一目录  (1)存放取出的元素 (2)将目标文件内容的元素依次取出 (for循环) (3)所有元素依次添加进列表中 (4)完整

    2024年02月16日
    浏览(42)
  • 【网络安全带你练爬虫-100练】第6练:内嵌发包提取数据

    目录 一、分析目标: 二、代码实现 目标1:对于捕获的URL内嵌发包 目标2:找到电话和邮箱的位置 目标3:提取电话和邮箱 三、完整代码 四、网络安全小圈子 (注:需要带上登录成功后的cookie发包) 点击进去爬取每个企业里面的电话、邮箱 (我们是来投简历的,切勿干非法

    2024年02月12日
    浏览(47)
  • 【网络安全带你练爬虫-100练】第23练:文件内容的删除+写入

    目录 0x00 前言: 0x02 解决: 本篇博文可能会有一点点的超级呆 你是不是也会想: 使用pyrhon将指定文件夹位置里面的1.txt中数据全部删除以后----然后再将参数req_text的值写入到1.txt (小呆呆实锤) 区分一下: “w”模式: 使用 \\\"w\\\" 模式打开一个文件时,如果该文件已经存在,

    2024年02月09日
    浏览(42)
  • 【网络安全带你练爬虫-100练】第11练:xpath快速定位提取数据

    目录 一、目标1:使用etree解析数据 二、目标2:使用xpath爬取指定数据 三、目标3:提取指定数据  四、网络安全小圈子 其余的不用过多介绍,前面的练习都给大家已经过了一遍 其中数据解析代码如下 对返回的内容进行UTF-8解码,不然会出现乱码 我们来爬一下这几个标题  

    2024年02月13日
    浏览(80)
  • 【网络安全带你练爬虫-100练】第5练:爬虫的翻页操作+错误情况过滤

    目录 一、翻页分析: 二、代码逻辑 1、入口程序修改 2、page参数传入 三、完整代码 1、运行结果 2、错误分析: 3、缺陷代码: 4、完善逻辑: 5、完善代码: (说在前面,任何逻辑都有很多方法实现,我们先从最笨的讲起) (注:其中的cookie需要填自己的) 通过对比第一页与

    2024年02月12日
    浏览(47)
  • 【网络安全带你练爬虫-100练】第19练:使用python打开exe文件

    目录 一、目标1:调用exe文件 二、目标2:调用exe打开文件 1、subprocess 模块允许在 Python 中启动一个新的进程,并与其进行交互 2、subprocess.run() 函数来启动exe文件 3、subprocess.run([\\\"文件路径\\\"],check=True/) 4、check:如果程序返回一个非零的退出码,subprocess.run() 函数就会抛出一个

    2024年02月11日
    浏览(43)
  • 【网络安全带你练爬虫-100练】第8练:json数据的最小项提取

    目录 一、目标1:爬取指定json中数据 二、目标2:循环取json中数据 三、目标3:提取每个数据中的某一项 四、网络安全小圈子 爬取data里数据   核心代码: (1)json.loads()方法可用于解析有效的JSON字符串并将其转换为Python字典 (2)dirt1[\\\'data\\\']是打印json中的data部分 运行结果:

    2024年02月13日
    浏览(49)
  • 【网络安全带你练爬虫-100练】第22练:数据包中参数提取与处理

    目录 一、目标1:GET数据包的处理 1、GET数据包中参数的提取 2、GET请求中 统计参数个数 二、目标2:POST数据包的处理 1、post中参数个数的提取 2、POST请求中 统计参数个数 (与GET类似,就不再做叙述了)

    2024年02月10日
    浏览(52)
  • 【网络安全带你练爬虫-100练】第21练:批量获取文件夹中文件名

    目录 一、目标1:使用python爬取指定文件夹中的文件名 二、目标2:在文件夹指定目录打开命令行 方法一:使用 os 模块 将 /path/to/folder 替换为实际的文件夹路径。 os.listdir() 函数用于获取指定文件夹中的文件名列表,然后可以遍历列表并处理每个文件名 方法二:使用 glob 模块

    2024年02月09日
    浏览(37)
  • 【网络安全带你练爬虫-100练】第10练:re的正则匹配、文件夹创建、图片下载

    目录 一、目标1:正则匹配图片的URL 二、目标2:创建文件夹 三、目标3:保存图片到test文件夹中  四、网络安全小圈子 URL位置 我们可以找到img都在这个标签里面     请求方法GET   提取URL位置 需要掌握的 目标标签如下: 需要提取的内容如下: (多加了一个为转义字

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包