网络爬虫-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结构 首先,我们构建一个基本的HTML结构,包括一个表单用于文件上传,以及一个列表用于展示已上传文件: HTML <!DOCTYPE html> <html> <head><title>酷炫文件上传下载</title><link …...
Gateway 统一网关
一、初识 Gateway 1. 为什么需要网关 我们所有的服务可以让任何请求访问,但有些业务不是对外公开的,这就需要用网关来统一替我们筛选请求,它就像是房间的一道门,想进入房间就必须经过门。而请求想要访问微服务,就必须…...
7 种常见的前端攻击
大家都知道,保证网站的安全是十分重要的,一旦网站被攻陷,就有可能造成用户的经济损失,隐私泄露,网站功能被破坏,或者是传播恶意病毒等重大危害。所以下面我们就来讲讲7 种常见的前端攻击。 1. 跨站脚本 (X…...
element plus实现点击上传于链接上传并且回显到upload组件中
摘要: 今天遇到一个问题:vue3使用elemnt plus的上传图片时,数据是从别人的系统导出来的商品,图片是http的形式的,并且商品很多的,一个一个下载下来再上传很麻烦的,所以本系统插件商品时图片使用…...
ELK日志分析系统部署
ELK日志分析系统 ELK指的是ElasticsearchLogstashKibana这种架构的缩写。 ELK是一种日志分析平台,在很早之前我们经常使用Shell三剑客(一般泛指grep、sed、awk)来进行日志分析,这种方式虽然也可以应对多种场景,但是当…...
驾校小程序:一站式学车解决方案的设计与实践
一、引言 随着移动互联网技术的飞速发展,人们的生活方式和消费习惯正在发生深刻变化。驾校作为传统的服务行业,也面临着数字化转型的迫切需求。驾校小程序作为一种轻量级的应用,能够为用户提供便捷、丰富的学车服务,成…...
【自然语言处理】BERT模型
BERT:Bidirectional Encoder Representations from Transformers BERT 是 Google 于 2018 年提出的 自然语言处理(NLP)模型,它基于 Transformer 架构的 Encoder 部分。BERT 的出现极大提升了 NLP 任务的性能,如问答系…...
Android 添加如下飞行模式(飞行模式开和关、飞行模式开关菜单显示隐藏)接口
请添加如下飞行模式(飞行模式开关、飞行模式开关显示隐藏)接口: 飞行模式飞行模式开关com.action.airplankey: enable value:boolean true open the airplan false close the airplan关闭Intent intent = new Intent(); intent.setAction("com.action.airplan");…...
【Vue3】基于 Vue3 + ECharts 实现北京市区域地图可视化
文章目录 基于 Vue3 ECharts 实现北京市区域地图可视化1、引言2、项目初始化2.1、环境搭建2.2 、安装依赖2.3、项目结构 3、地图数据准备3.1、地图 JSON 文件获取(具体的json数据) 4、 组件开发4.1、Map 组件的设计思路4.2、基础结构实现4.3、核心数据结…...
【IC】什么是min period check
在 Synopsys Primetime 工具中可以检查.lib 文件中时钟输入的最小周期。想象这样一个场景,有一个设计 A,它有一个名为 clk 的时钟,并且该设计的 clk 周期被设定为一个值,比如 2 纳秒,即 500MHz。假设我们在进行静态时序…...
MyBatis入门之一对多关联关系(示例)
【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》(杨章伟,刘祥淼)【摘要 书评 试读】- 京东图书 …...
【Git 】Windows 系统下 Git 文件名大小写不敏感
背景 在 Windows 系统上,Git 对文件名大小写的不敏感性问题确实存在。由于 Windows 文件系统(如 NTFS )在默认情况下不区分文件名大小写所导致的。 原因分析 文件系统差异 Windows文件系统(如 NTFS)默认不区分文件名…...
【算法系列-二叉树】层序遍历
【算法系列-二叉树】层序遍历 文章目录 【算法系列-二叉树】层序遍历1. 算法分析🛸2. 相似题型🎯2.1 二叉树的层序遍历II(LeetCode 107)2.2 二叉树的右视图(LeetCode 199)2.3 二叉树的层平均值(LeetCode 637)2.4 N叉树的层序遍历(LeetCode 429)2.5 在每个…...
我的世界方块改进版
引子 之前文章的磁性方块,通过3D打印实现,也批量打印了一些,下图就是一个小树 使用过程中,发现磁力感觉不紧,所以想改进一版。 正文 之前的结构如下:: 如果出现相邻的空隙间的磁铁相互作用&am…...
博客搭建之路:hexo增加搜索功能
文章目录 hexo增加搜索功能本地搜索弊端algolia搜索 hexo增加搜索功能 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 作为一个博客,没有搜索功能,如何在大批文章中找到自己想要的,那在hexo中如何增加搜索功能呢? search:path: sea…...
2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis、微服务、分布式、ES、设计模式)
前言 春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸…...
万网域名注册网站/怎么自己弄一个网站
1、$(document).ready(function(){})dom加载完成后触发window.onload只能注册一个方法页面所有内容加载完成后触发(图片,css,js都加缩写$(function(){})2、jQuery对象(包装集) dom对象var div document.getElementById("id") dom对…...
呼市网站建设/网络推广服务合同
readonly在代码中只能在字段初始化器和构造函数中赋值,并不是说readonly只能赋值一次,超出这个范围以后readonly就不能通过代码修改了,但是还是可以用反射来修改,readonly仅仅是提示编译器在其他地方赋值的时候编译错误而已 来源&…...
山东建设公司网站/360站长平台链接提交
先需求分析一下---传统的web应用是在线应用,这其实也是web的特色,对于PC时代问题并不大,但到了移动互联网时代,设备终端位置不再固定,依赖无线信号,网络的可靠性变得更低。比如:在火车上&#x…...
广州哪家做网站好/网站优化方案模板
自动布局之autoresizingMask使用详解(Storyboard&Code) http://www.cocoachina.com/ios/20141216/10652.html 必须禁用autolayout才能使用autoresizingMask 前言:现在已经不像以前那样只有一个尺寸,现在最少的iPhone开发需要最…...
wordpress升级流程/手机优化游戏性能的软件
文章目录分层思想OSI七层模型TCP/IP五层协议簇数据的封装与解封装过程设备与层之间的对应关系各层之间通信协议与层之间的对应关系TCP/IP四层模型分层思想 通信需求---->定义协议(规则)标准 完成一件事需要的协议太多!就需要进行分层&…...
网站建设和管理情况自查报告/安卓优化
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼7.三目元运算符与三目元表达式三目元表达式是由条件运算符和变量构成的。格式:?:其中,表达式1的值为bool类型,表达式2和表达式3的值可以是任何类型。条件表达式的执行顺序…...