当前位置: 首页 > news >正文

网络爬虫-Python网络爬虫和C#网络爬虫

爬虫是一种从互联网抓取数据信息的自动化程序,通过 HTTP 协议向网站发送请求,获取网页内容,并通过分析网页内容来抓取和存储网页数据。爬虫可以在抓取过程中进行各种异常处理、错误重试等操作,确保爬取持续高效地运行

1、Python网络爬虫

Python 网络爬虫详细介绍
Python网络爬虫是自动化程序,用来抓取网页上的数据。通过网络爬虫,你可以从互联网上采集、处理数据,比如抓取产品信息、新闻内容等。Python因其丰富的库和强大的生态系统,非常适合构建网络爬虫。下面详细介绍Python爬虫的基本流程、常用库、反爬机制以及如何处理爬虫数据。

1. Python 爬虫基本流程

网络爬虫的工作流程主要包括以下步骤:

发送请求:向目标网站发起请求(GET/POST),获取网页内容。
获取响应:服务器返回HTML或JSON等格式的数据。
解析网页:将获取到的网页内容解析,提取目标数据。
数据存储:将提取到的数据保存到文件或数据库中。
递归抓取:如果需要,可以根据页面的链接继续递归抓取其他页面。

2. Python 常用爬虫库

Python有多个用于实现网络爬虫的库,以下几个最常用的库是构建爬虫的基础。

(1) Requests 库

Requests是一个简单高效的HTTP库,能够发出请求并接收响应,支持GET、POST等常见的请求方式。

安装 Requests:

pip install requests

基本使用:

import requestsresponse = requests.get('https://example.com')
if response.status_code == 200:print(response.text)  # 打印网页HTML内容

(2) BeautifulSoup 库

BeautifulSoup是一个用于解析HTML/XML的库,能够方便地从网页中提取数据。它可以和Requests一起使用,解析网页内容。

安装 BeautifulSoup:

pip install beautifulsoup4

解析网页内容:

from bs4 import BeautifulSoup
import requestsresponse = requests.get('https://example.com')
soup = BeautifulSoup(response.text, 'html.parser')# 获取网页标题
title = soup.title.string
print(f"网页标题: {title}")# 提取所有链接
links = soup.find_all('a')
for link in links:print(link.get('href'))

(3) lxml 库

lxml是一个性能极佳的HTML/XML解析库,能够快速解析和处理大量网页内容。

安装 lxml:

pip install lxml

使用示例:

from lxml import etree
import requestsresponse = requests.get('https://example.com')
tree = etree.HTML(response.content)# 提取所有链接
links = tree.xpath('//a/@href')
print(links)

(4) Scrapy 爬虫框架

Scrapy是Python最强大的爬虫框架,适用于大型爬虫项目。它支持异步下载、多线程爬取、自动处理链接追踪等。

安装 Scrapy:

pip install scrapy

创建 Scrapy 项目:

scrapy startproject myproject

基本爬虫:

i

mport scrapyclass ExampleSpider(scrapy.Spider):name = 'example'start_urls = ['https://example.com']def parse(self, response):for title in response.css('title::text'):yield {'title': title.get()}

3. 反爬机制及其应对

很多网站会有反爬机制,常见的反爬措施有:

IP封禁:频繁请求可能导致IP封禁。
User-Agent 检测:服务器会检查请求头是否为真实浏览器发出的请求。
验证码:通过验证码防止自动化请求。
动态加载内容:使用JavaScript动态加载内容。
应对措施:

设置请求头:通过设置 User-Agent 模拟浏览器访问。
使用代理:通过代理IP避免频繁访问被封禁。
模拟浏览器行为:使用 Selenium 等工具来处理动态加载的内容。
自动识别验证码:使用 OCR 工具(如Tesseract)识别验证码。
设置User-Agent示例:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get('https://example.com', headers=headers)

使用Selenium处理动态内容:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://example.com')html = driver.page_source
print(html)
driver.quit()

4. 数据存储

抓取到的数据可以存储为文件或写入数据库。

保存为CSV文件:

import csvwith open('data.csv', mode='w') as file:writer = csv.writer(file)writer.writerow(['Name', 'URL'])writer.writerow(['Example', 'https://example.com'])

存储到数据库:

import pymysqlconn = pymysql.connect(host='localhost', user='user', password='password', db='database')
cursor = conn.cursor()cursor.execute("INSERT INTO table_name (name, url) VALUES (%s, %s)", ('Example', 'https://example.com'))
conn.commit()
conn.close()

C# 网络爬虫详细介绍

C# 也可以用于网络爬虫开发,通过 HTTP 请求获取网页数据并进行解析。与 Python 类似,C# 也有相应的库和框架,虽然 C# 网络爬虫在简便性和灵活性上不如 Python,但在某些企业级应用中,C# 也表现出色。

1. C# 爬虫的基本流程

与 Python 爬虫类似,C# 网络爬虫的基本流程如下:

发送HTTP请求:使用 HttpClient 发送 GET/POST 请求。
获取网页响应:获取网页内容(HTML)。
解析HTML内容:使用正则表达式或 HTML 解析库。
提取并存储数据:提取有用数据,保存到文件或数据库。

2. 常用库

(1) HttpClient

HttpClient 是用于发送 HTTP 请求的 .NET 类,能够轻松地与网页进行交互。

示例代码:

using System;
using System.Net.Http;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){using (HttpClient client = new HttpClient()){HttpResponseMessage response = await client.GetAsync("https://example.com");string result = await response.Content.ReadAsStringAsync();Console.WriteLine(result);}}
}

(2) HtmlAgilityPack

HtmlAgilityPack 是 C# 的 HTML 解析库,能够方便地从 HTML 中提取数据,类似于 Python 的 BeautifulSoup。

  • 安装 HtmlAgilityPack:
Install-Package HtmlAgilityPack
  • 解析 HTML 并提取数据:
using HtmlAgilityPack;
using System;class Program
{static void Main(string[] args){var url = "https://example.com";HtmlWeb web = new HtmlWeb();var htmlDoc = web.Load(url);var title = htmlDoc.DocumentNode.SelectSingleNode("//title").InnerText;Console.WriteLine("标题: " + title);var links = htmlDoc.DocumentNode.SelectNodes("//a[@href]");foreach (var link in links){Console.WriteLine(link.GetAttributeValue("href", string.Empty));}}
}

(3) 正则表达式

C# 提供了强大的正则表达式库来从网页内容中提取数据。

示例代码:

using System;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;class Program
{static async Task Main(string[] args){using (HttpClient client = new HttpClient()){string content = await client.GetStringAsync("https://example.com");// 使用正则表达式提取所有链接Regex regex = new Regex(@"href=""(.*?)""");MatchCollection matches = regex.Matches(content);foreach (Match match in matches){Console.WriteLine(match.Groups[1].Value);}}}
}

3. 反爬机制应对

与 Python 类似,C# 网络爬虫也需要应对反爬机制。通过设置请求头和使用代理,可以避免被网站封禁。

  • 设置User-Agent:
using System;
using System.Net.Http;class Program
{static async Task Main(string[] args){HttpClientHandler handler = new HttpClientHandler();using (HttpClient client = new HttpClient(handler)){client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");HttpResponseMessage response = await client.GetAsync("https://example.com");string result = await response.Content.ReadAsStringAsync();Console.WriteLine(result);}}
}
  • 使用代理:
HttpClientHandler handler = new HttpClientHandler
{Proxy = new WebProxy("http://yourproxy:8080", true),UseProxy = true
};

4. 数据存储

在 C# 爬虫中,数据可以被保存到文件、数据库等存储方式。

保存为文件:

using System;
using System.IO;class Program
{static void Main(string[] args){string data = "爬虫抓取的数据";File.WriteAllText("data.txt", data);}
}
  • 存储到数据库(SQL Server):
using System;
using System.Data.SqlClient;class Program
{static void Main(string[] args){string connectionString = "Data Source=.;Initial Catalog=myDatabase;Integrated Security=True";using (SqlConnection conn = new SqlConnection(connectionString)){conn.Open();string query = "INSERT INTO WebData (Title, Url) VALUES (@Title, @Url)";using (SqlCommand cmd = new SqlCommand(query, conn)){cmd.Parameters.AddWithValue("@Title", "Example");cmd.Parameters.AddWithValue("@Url", "https://example.com");cmd.ExecuteNonQuery();}}}
}

相关文章:

网络爬虫-Python网络爬虫和C#网络爬虫

爬虫是一种从互联网抓取数据信息的自动化程序,通过 HTTP 协议向网站发送请求,获取网页内容,并通过分析网页内容来抓取和存储网页数据。爬虫可以在抓取过程中进行各种异常处理、错误重试等操作,确保爬取持续高效地运行 1、Python网…...

如何有效解除TikTok账号间的IP关联

在当今社交媒体环境中,TikTok凭借其独特的短视频形式吸引了数以亿计的用户。对许多内容创作者而言,运营多个账号是获取更大曝光和丰富内容的有效策略。然而,如何避免这些账号之间的IP关联,以防止被平台识别并封禁,成为…...

Python自省机制

Python 自省机制 Python 自省(Introspection)是一种动态检查对象的能力,使得开发者可以在运行时获取对象的相关信息,比如属性、方法、类型等。自省机制让 Python 具备了更强的动态性和灵活性,便于调试和开发。 自省&…...

wgan-gp 对连续变量 训练,6万条数据,训练结果不错,但是到局部的时候,拟合不好,是否可以对局部数据也进行计算呢

Wasserstein GAN with Gradient Penalty (WGAN-GP) 是一种改进的生成对抗网络(GAN),它通过引入梯度惩罚来改进训练过程,从而提高生成模型的稳定性和质量。如果你在使用WGAN-GP对连续变量进行训练时,发现整体训练结果不…...

python 制作 发货单 (生成 html, pdf)

起因, 目的: 某个小店,想做个发货单。 过程: 先写一个 html 模板。准备数据, 一般是从数据库读取,也可以是 json 格式,或是 python 字典。总之,是数据内容。使用 jinja2 来渲染模板。最终的结果可以是 h…...

GeoWebCache1.26调用ArcGIS切片

常用网址: GeoServer GeoWebCache (osgeo.org) GeoServer 用户手册 — GeoServer 2.20.x 用户手册 一、版本需要适配:Geoserver与GeoWebCache、jdk等的版本适配对照 ​ 查看来源 二、准备工作 1、数据:Arcgis标准的切片,通过…...

深度学习-卷积神经网络-基于VGG16模型, 实现猫狗二分类(文末附带数据集下载链接, 长期有效)

简介: 1.基于VGG16模型进行特征提取, 结合mlp实现猫狗二分类 2.训练数据--"dog_cat_class\training_set" 3.模型训练流程 1.对图像数据进行导入和预处理 2.搭建模型, 导入VGG16模型, 去除mlp层, 将经过VGG16训练后的数据作为输入, 输入到自建的mlp层中进行训练, 要…...

计算Java集合占用的空间【详解】

以ArrayList为例,假设集合元素类型是Person类型,假设集合容量为10,目前有两个person对象{name:“Jack”,age12} {name:“Tom”,age14} public class Person{private String name;private int age; }估算Person对象占用的大小: 对…...

仕考网:关于中级经济师考试的介绍

中级经济师考试是一种职称考试,每年举办一次,报名时间在7-8月,考试时间在10-11月 报名入口:中guo人事考试网 报名条件: 1.高中毕业并取得初级经济专业技术资格,从事相关专业工作满10年; 2.具备大学专科…...

SYN590RL 300MHz至450MHz ASK接收机芯片IC

一般描述 SYN590RL是赛诺克全新开发设计的一款宽电压范围,低功耗,高性能,无需外置AGC电容,灵敏度达到典型-110dBm,300MHz”450MHz 频率范围应用的单芯片ASK或OOK射频接收器。 SYN59ORL是一款典型的即插即用型单片高集成度无线接收器&…...

15分钟学 Go 第 20 天:Go的错误处理

第20天:Go的错误处理 目标 学习如何处理错误,以确保Go程序的健壮性和可维护性。 1. 错误处理的重要性 在开发中,错误处理至关重要。程序在运行时可能会出现各种问题,例如文件未找到、网络连接失败等。正确的错误处理能帮助我们…...

C++——string的模拟实现(上)

目录 引言 成员变量 1.基本框架 成员函数 1.构造函数和析构函数 2.拷贝构造函数 3.容量操作函数 3.1 有效长度和容量大小 3.2 容量操作 3.3 访问操作 (1)operator[]函数 (2)iterator迭代器 3.4 修改操作 (1)push_back()和append() (2)operator函数 引言 在 C—…...

JavaCV 之均值滤波:图像降噪与模糊的权衡之道

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...

桥接模式,外界与主机通,与虚拟机不通

一 二 在此选择Windows与外界连接的网卡,通过有线连就选有线网卡,通过无线连就选无线网卡。 三 如果需要设置固定IP,则选择"Manual"进行设置。我这边根据实际需要,走无线的时候用DHCP,走有线的时候设固定IP…...

用HTML构建酷炫的文件上传下载界面

1. 基础HTML结构 首先&#xff0c;我们构建一个基本的HTML结构&#xff0c;包括一个表单用于文件上传&#xff0c;以及一个列表用于展示已上传文件&#xff1a; HTML <!DOCTYPE html> <html> <head><title>酷炫文件上传下载</title><link …...

Gateway 统一网关

一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问&#xff0c;但有些业务不是对外公开的&#xff0c;这就需要用网关来统一替我们筛选请求&#xff0c;它就像是房间的一道门&#xff0c;想进入房间就必须经过门。而请求想要访问微服务&#xff0c;就必须…...

7 种常见的前端攻击

大家都知道&#xff0c;保证网站的安全是十分重要的&#xff0c;一旦网站被攻陷&#xff0c;就有可能造成用户的经济损失&#xff0c;隐私泄露&#xff0c;网站功能被破坏&#xff0c;或者是传播恶意病毒等重大危害。所以下面我们就来讲讲7 种常见的前端攻击。 1. 跨站脚本 (X…...

element plus实现点击上传于链接上传并且回显到upload组件中

摘要&#xff1a; 今天遇到一个问题&#xff1a;vue3使用elemnt plus的上传图片时&#xff0c;数据是从别人的系统导出来的商品&#xff0c;图片是http的形式的&#xff0c;并且商品很多的&#xff0c;一个一个下载下来再上传很麻烦的&#xff0c;所以本系统插件商品时图片使用…...

ELK日志分析系统部署

ELK日志分析系统 ELK指的是ElasticsearchLogstashKibana这种架构的缩写。 ELK是一种日志分析平台&#xff0c;在很早之前我们经常使用Shell三剑客&#xff08;一般泛指grep、sed、awk&#xff09;来进行日志分析&#xff0c;这种方式虽然也可以应对多种场景&#xff0c;但是当…...

驾校小程序:一站式学车解决方案的设计与实践

​​一、引言 随着移动互联网技术的飞速发展&#xff0c;人们的生活方式和消费习惯正在发生深刻变化。驾校作为传统的服务行业&#xff0c;也面临着数字化转型的迫切需求。驾校小程序作为一种轻量级的应用&#xff0c;能够为用户提供便捷、丰富的学车服务&#xff0c;成…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...