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

python系列30:各种爬虫技术总结

1. 使用requests获取网页内容

以巴鲁夫产品为例,可以用get请求获取内容:
https://www.balluff.com.cn/zh-cn/products/BES02YF
对应的网页为:
在这里插入图片描述
使用简单方法进行解析即可

import requests
r = 'BES02YF'
res = requests.get("https://www.balluff.com.cn/zh-cn/products/%s"%r).text
result = res.split("</title>")[0].split("<title>")[1]

2. 添加多进程

使用multiprocessing进行加速,以上面的balluff为例:

from multiprocessing.dummy import Pool as ThreadPool
from tqdm import tqdm
import numpy as np
import os,json,requests,base64,struct
data = pd.read_excel("balluff.xlsx",sheet_name='all')
valuelist = list(data['Type'])
def getf(type_value):try:res = requests.get("https://www.balluff.com.cn/zh-cn/products/%s"%type_value).textreturn res.split("</title>")[0].split("<title>")[1]except:return None
results = []
with ThreadPool(100) as p:results = list(tqdm(p.imap(getf, valuelist), total=len(valuelist)))

3. 加入header

有一些网站有防爬虫的功能,需要在请求中添加header,例如西门子的网站需要用如下的方法:

def getf(type_value):try:headers = {"user-agent": "Mizilla/5.0"}res = requests.get("""https://mall.industry.siemens.com/mall/zh/CN/Catalog/Product/?mlfb=%s&SiepCountryCode=CN"""%type_value,headers=headers).text.split("""productIdentifier""")[1]return res.split("""</span>""")[0].split('>')[-1]except:return None

4. 使用selenium

以festo为例,会很讨厌的弹出对话框。
在这里插入图片描述

我们使用selenium模拟点击。并且用find_element找到元素:

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://www.festo.com.cn/cn/zh/search/?text=548755')
f1=driver.find_element(By.PARTIAL_LINK_TEXT,'接受')
f1.click()
from tqdm import tqdm
r1 = []
r2 = []
for type_value in tqdm(valuelist):try:driver.get('https://www.festo.com.cn/cn/zh/search/?text=%s'%type_value)time.sleep(1)r1.append(driver.find_element(By.CLASS_NAME,'product-code--NjIDg').text)try:r2.append(driver.find_element(By.CLASS_NAME,'ident-code--qx13c').text)except:r2.append(driver.find_element(By.CLASS_NAME,'product-order-code--TR15s').text)except:r1.append(None)r2.append(None)

5. 获取真实的requests地址

以keyence为例,查看网页源代码是无法获得产品清单的,需要在chrome的开发者工具中点击Network,选择Fetch/XHR,然后刷新页面,找到Type为fetch的链接:
在这里插入图片描述
链接为/data/api/seriesModels?siteID=21&languageID=zh-CN&groupID=tcm%3A115-347504&typeID=tcm%3A115-347487&seriesID=WS_SR_fu,其中groupID开始的部分,可以从源代码中获得。具体代码为:

import json
from tqdm import tqdm
result = []
for r2i in tqdm(r2):result += json.loads(requests.get('https://www.keyence.com.cn/data/api/seriesModels?siteID=21&languageID=zh-CN&'+\list(filter(lambda x:'prd-seriesFooter-navLink of-support' in x,requests.get(r2i)\.text.split('\n')))[0].split('?')[1].split('&modelId')[0].replace('Id','ID')).text)['models']

如果找到的链接过于难处理(比如post请求带着一堆请求体),那可以直接右键,选择copy->copy curl,然后替换其中的关键字,用命令行执行即可。

相关文章:

  • MySQL增删改查
  • Java Nio核心概念理解
  • 关于 Mybatis 的开启二级缓存返回对象不一致问题
  • 嵌入式PCB制图面试题及参考答案(2万字长文)
  • 【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例应用
  • 【2024德国签证】去德国读博士需要申请什么签证?
  • Spire.PDF for .NET【文档操作】演示:以特定的缩放比例/百分比打开 PDF 文件
  • 力扣习题--哈沙德数
  • Redis Stream Redisson Stream
  • Cube-Studio:开源大模型全链路一站式中台
  • 千益畅行,旅游卡,如何赚钱?
  • 【区块链+基础设施】国家健康医疗大数据科创平台 | FISCO BCOS应用案例
  • AMSA-UNet | 基于自注意力的多尺度 U-Net 提升图像去模糊性能
  • 「ETL趋势」FDL数据开发支持版本管理、实时管道支持多对一、数据源新增支持神通
  • element-plus Transfer 穿梭框半成品
  • 【译】JS基础算法脚本:字符串结尾
  • ECMAScript入门(七)--Module语法
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Lsb图片隐写
  • miaov-React 最佳入门
  • rc-form之最单纯情况
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 爱情 北京女病人
  • 终端用户监控:真实用户监控还是模拟监控?
  • ​io --- 处理流的核心工具​
  • $NOIp2018$劝退记
  • (C)一些题4
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (超详细)语音信号处理之特征提取
  • (第一天)包装对象、作用域、创建对象
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (三)docker:Dockerfile构建容器运行jar包
  • (一)Dubbo快速入门、介绍、使用
  • (一)Java算法:二分查找
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • .htaccess配置重写url引擎
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net项目IIS、VS 附加进程调试
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Autowired和@Resource装配
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @PreAuthorize与@Secured注解的区别是什么?
  • [ C++ ] STL---仿函数与priority_queue
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [20150707]外部表与rowid.txt
  • [2016.7 day.5] T2
  • [20160902]rm -rf的惨案.txt
  • [2544]最短路 (两种算法)(HDU)
  • [Android]如何调试Native memory crash issue
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息