网络爬虫-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();}}}
}

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

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

相关文章

DataSophon集成ApacheImpala的过程

注意: 本次安装操作系统环境为Anolis8.9(Centos7和Centos8应该也一样) DataSophon版本为DDP-1.2.1 整合的安装包我放网盘了: 通过网盘分享的文件:impala-4.4.1.tar.gz等2个文件 链接: https://pan.baidu.com/s/18KfkO_BEFa5gVcc16I-Yew?pwdza4k 提取码: za4k 1…

C#与C++交互开发系列(十二):托管和非托管内存管理策略

前言 在进行C#与C互操作开发时,内存管理是一个非常重要的环节。由于C#采用托管内存管理(由垃圾回收机制GC控制),而C则使用手动内存管理(需要开发者负责分配和释放内存),因此跨语言调用时&#…

光耦的应用

什么是光耦 光耦是一种实现信号隔离的元器件,通常用于各部分电路之间,使其不互相受到影响。 工作原理 光耦是由一个发光二极管和一个光敏三极管封装而成的。其使用原理为: 当发光二极管有信号输入时,则会被点亮,此时…

PHP-FPM 性能配置优化

4 核 8 G 服务器大约可以开启 500 个 PHP-FPM,极限吞吐量在 580 qps (Query Per Second 每秒查询数)左右。 Nginx php-fpm 是怎么工作的? php-fpm 全称是 PHP FastCGI Process Manager 的简称,从名字可得知&#xff…

OJ在线编程常见输入输出(java版本)

基础知识 BufferedReader 概述 BufferedReader是Java I/O中的一个类,它是一个带缓冲区的字符输入流,用于从字符输入流中读取字符。它提供了一种逐行读取文本文件的方法,可以轻松地读取大量文本数据,并且可以通过使用缓冲区来提…

基于SSM的“众优”大学生家教平台的设计与实现

前言 对于当今社会的人们来说,互联网技术是必不可少的,随着经济和技术的不断发展,计算机已经深入到各个领域。“众优”大学生家教平台将人们的时间需求与计算机技术结合起来,架起一座桥梁,使用在线查看“众优”大学生…

设计模式讲解

设计原则 单一职责原则 > 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中 > //一个人类 public class People {/*** 人类会编程*/public void coding(){System.out.println("int mian() {");System.out.println(" print…

CI/CD 流水线系统-开源框架Tekton

文章目录 CI/CD 流水线系统-开源框架Tekton什么是TektonTekton优点Tekton 组件介绍Tekton 概念术语 CI/CD 流水线系统-开源框架Tekton 什么是Tekton 官网:https://tekton.dev/ Tekton 是一个强大、灵活的构建 CI/CD 流水线系统的开源框架,允许开发者构建、测试和…

【牛客算法】某司面试算法题:循环右移二叉树

一、算法题描述 1.1 算法描述 现有一棵n个节点构成的二叉树,请你将每一层的节点向右循环位移k位。某层向右位移一位(即k1)的含义为: 若当前节点为左孩子节点,会变成当前节点的双亲节点的右孩子节点。 若当前节点为右儿子,会变成…

直播系统源码技术搭建部署流程及配置步骤

系统环境要求 PHP版本:5.6、7.3 Mysql版本:5.6,5.7需要关闭严格模式 Nginx:任何版本 Redis:需要给所有PHP版本安装Redis扩展,不需要设置Redis密码 最好使用面板安装:宝塔面板 - 简单好用的…

springboot中redis并发锁的等待时间设置长短

问题:等待时间我设置的大一点,还是立刻抛出错误不等待;个人是觉得要立刻抛出错误,首先如果同一把锁并发量太大,没有限流,会造成服务器连接数立刻达到最大连接数,服务不可用;其次等待…

Android——事件冲突处理

当我们给列表的item设置了点击事件后&#xff0c;又给item中的按钮设置了点击事件&#xff0c;此时item的点击事件会失效。 解决 给item的布局xml中设置以下属性 android:descendantFocusability"blocksDescendants"<LinearLayout xmlns:android"http://sc…

HT7181 16.8V,14A高效升压转换器

1、特征 输入电压范围:2.7V-16V 输出电压范围:最高16.8V 固定开关频率:360kHz 可编程峰值电流:14A 高转换效率: 94% (VIN 7.2V, VOUT9.3V, IOUT1.5A) 90% (VIN 7.2V, VOUT9.3V, IOUT 7A) 93% (VIN 7.2V, VOUT12V, IOUT 1.5A) 90% (VIN 7.2V, VOUT12V, IOUT 5.5A) 90% (VIN …

电脑磁盘再次分区

如何把c盘变成一个大的盘&#xff1f; 给电脑的C盘扩容通常涉及到调整硬盘分区的大小&#xff0c;这可以通过多种方法实现&#xff0c;以下是一些常见的步骤&#xff1a; 1. **使用磁盘管理工具**&#xff1a; - 在Windows系统中&#xff0c;可以使用内置的磁盘管理工具来调整…

220V降12V1A恒流点灯WT5112

220V降12V1A恒流点灯WT5112 芯片特点 高精度恒流输出&#xff1a;WT5112 是一款适用于非隔离降压型恒流 LED 驱动芯片。在 220V 降 12V、1A 恒流点灯应用中&#xff0c;它能够提供高精度的恒流输出。其恒流精度通常可以达到 3% - 5% 左右&#xff0c;这对于 LED 灯的稳定发光非…

从Docker容器中备份整个PostgreSQL

问题 现在需要从Docker容器中备份整个PostgreSQL后&#xff0c;然后&#xff0c;使用备份文件在另外一个pg的docker容器中恢复过来。 步骤 备份旧容器中的PG # 登录到旧的PG容器中 docker exec -it postgres bash # 备份数据库 pg_dumpall -c -U postgres > dump_date %…

安卓基础001

前言 也是好久没有更新博客了,最近实习也是需要学习一些知识哈哈哈哈哈哈为了更好的发展嘛,咱们从客户端开始,过程可能有点像写前端,不喜勿喷,希望在学习的过程中也可以给大家带来一些简单得帮助吧....... tips:这里跳过安卓studio安装,大家可自行寻找教程 写的不详细,只是为了…

Zookeeper面试整理-源码及实现细节

Zookeeper 的源码和实现细节是理解其高可用性、分布式一致性和高效性的关键。以下是 Zookeeper 的核心实现细节,涵盖其架构、关键模块、以及具体的代码实现机制。 1. Zookeeper 架构 Zookeeper 采用 Leader-Follower 架构,集群由多个节点组成。主要分为三种角色:Leader、Fol…

web相关知识学习笔记

一&#xff0c; web安全属于网络信息安全的一个分支&#xff0c;www即全球广域网&#xff0c;也叫万维网&#xff0c;是一个分布式图形信息系统 二&#xff0c; 1.①安全领域&#xff0c;通常将用户端&#xff08;浏览器端&#xff09;称为前端&#xff0c;服务器端称为后端 ②…

【SAP Abap】X-DOC:SAP ABAP系统变量SY-INDEX与SY-TABIX差异点

【SAP Abap】X-DOC&#xff1a;SAP ABAP系统变量SY-INDEX与SY-TABIX差异点 SAP ABAP系统变量SY-INDEX与SY-TABIX差异点 ABAP系统变量SY-INDEX与SY-TABIX都是用来记录循环的次数。 SY-INDEX在do…endo和while…endwhile中有效&#xff0c; SY-TABIX在对内表的循环查询中有效&…