用python来爬取某鱼的商品信息(2/2)

目录

上一篇文章

本章内容

设置浏览器为运行结束后不关闭(可选)

定位到搜索框的xpath地址

执行动作

获取cookie

保存为json文件

修改cookie的sameSite值并且导入cookie

导入cookie(出错)

导入cookie(修改后)

最后出现页面

需要注意的问题

所有代码

总结


上一篇文章

用python来爬取某鱼的商品信息(1/2)_木木em哈哈的博客-CSDN博客本章讲理论,后面一节讲代码拿来练练手的,练练selenium包,实战一下(本来想拿来练手的,没想到他喵的有挺多防爬的,直接开局就困难难度我靠,凸(艹皿艹 ))找到可以爬取的网站然后添加cookie然后刷新界面就可以发现搜索结果出来了这一次实战经历真的让我遇到了selenium许多奇奇怪怪的反爬手段,也是让我可以大幅度提升自己实战经验的一个经历,前前后后排bug,绕反爬,这一个项目打了整整两天。累diethttps://blog.csdn.net/mumuemhaha/article/details/132238660?spm=1001.2014.3001.5502

本章内容

主要讲的是上一章的代码实现

导入所需要的程序包

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import json

设置浏览器为运行结束后不关闭(可选)

之后先设置自己想要搜索的内容,并且把浏览器设置为允许结束后不关闭,并且打开要爬取的咸鱼网站(可设可不设)

input_1=input('输入想要搜索的内容:')

option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)

# 注意此处添加了chrome_options参数
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')

定位到搜索框的xpath地址

driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')

执行动作

执行动作(调用鼠标api点击刚刚定位的搜索框,然后输入input_1的值并且回车

ActionChains(driver) \
    .move_to_element(driver_1) \
    .click_and_hold() \
    .pause(1) \
    .send_keys(input_1) \
    .key_down(Keys.ENTER)\
    .perform()

time.sleep(1)

中间的.pause(1)以及time.sleep(1)是等待一秒钟的时间(保险起见,怕网页没有加载好,或者你设置一个selenium等待函数更保险)

获取cookie

接下来就是获取cookie,获取cookie方法上一章讲了

 在你的浏览器上,下载cookie editor插件登录,不要用运行python时跳出的浏览器,正常打开浏览器(这样不会跳验证码。。。即使跳了也可以手动成功过),导出你的cookie

保存为json文件

然后新建一个json格式的文件并且把它命名为cookie.json

修改cookie的sameSite值并且导入cookie

导入cookie(出错)

cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:
    driver.add_cookie(cookie)

但是!!!!

前面讲过直接导入会报错

 assert cookie_dict[‘sameSite‘] in [‘Strict‘, ‘Lax‘] AssertionError()

由于这里语法规定sameSite必须为‘Strict‘, ‘Lax‘两个之一,不然就报错

所以我们要遍历字典,并且把字典中的sameSite设置为Strict

导入cookie(修改后)

所以代码改为

cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:
    if'sameSite' in cookie:
        cookie['sameSite'] = 'Strict'
    driver.add_cookie(cookie)
driver.refresh()

注意,导入cookie后要用driver.refresh()刷新

打印源代码

 然后打印网页的源代码,注意要等3秒加载元素(或者用re库带的筛选,筛选你想要的的元素,比如商品链接,价格,以及介绍)

time.sleep(3)
print(driver.page_source)

最后出现页面

需要注意的问题

  • 首先要说的是这个通过python不如通过app抓包来的稳定
  • 页面中你登录的cookie的失效时间是不确定的,所以你可能需要经常更新cookie(看个人情况)
  • 无法频繁(比如5分钟一次)搜索,否则会跳滑块验证,或者你有多个账号也可以搞(大概也就这个流程)
  • 写出来的代码只是提取出来网页源代码——其实都提取出网页源代码了,使用就只有一个筛选了(csdn上有大把的优质博主和大佬教你通过源代码过滤有用的信息)
  • 当然如果需要的话我可以再水一篇博客
  • 它理论上可以关联到钉钉机器人或者是QQ机器人上实现定时推送咸鱼信息(啊?你问我为什么不继续写?因为还没学,不然这期标题末尾就不是(2/2)而是(2/3)了;咳咳咳...u1s1,钉钉应该是有教程教的,傻妞机器人应该也可以执行python脚本的,“按理”来说不会很难实现,实在不行我再去学吧(累die...)

所有代码

所有代码附上吧

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import json

input_1=input('输入想要搜索的内容:')


# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)

# 注意此处添加了chrome_options参数
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')


driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')



ActionChains(driver) \
    .move_to_element(driver_1) \
    .click_and_hold() \
    .pause(1) \
    .send_keys(input_1) \
    .key_down(Keys.ENTER)\
    .perform()

time.sleep(1)

cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:
    if'sameSite' in cookie:
        cookie['sameSite'] = 'Strict'
    driver.add_cookie(cookie)
driver.refresh()

time.sleep(3)
print(driver.page_source)





总结

这些代码搞得我晕头转向的,尤其是那个内嵌的登录页面让我走了很多弯路,但是对于这个库的学习应该也算是初窥门径吧,如果有大佬有优化的地方欢迎指出(真的没学多深,很容易出错的)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)

1.简介 上一篇中已经将其的理论知识介绍了一下,这一篇就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划。 2.网络计划实战 通过上一篇的学习,将其分类为: (1)不需…

python -- 函数闭包

1. LEGB规则 L: local 是局部作用域 E: Enclosed 是嵌套函数的外层函数作用域 G: Global 全局作用域 B:Build-In 内置作用域 变量的使用权重:局部变量 > 外层作用域变量 > 全局变量 > 内置变量 下面代码执行后,x变量的值分别为多少&#xff1…

KafkaStream:Springboot中集成

1、在kafka-demo中创建配置类 配置kafka参数 package com.heima.kafkademo.config;import lombok.Data; import org.apache.kafka.common.serialization.Serdes; import org.apache.kafka.streams.StreamsConfig; import org.springframework.boot.context.properties.Configu…

怎么做Tik Tok海外娱乐公会呢?新加坡市场怎么样?

一、为什么选择TikTok直播 1. 海外市场潜力巨大 • 自2016年始,多家直播平台陆续拓展至东南亚、中东、俄罗斯、日韩、欧美、拉美等地区。 • 海外市场作为直播发展新蓝海,2021年直播行业整申请cmxyci体规模达百亿美元,并维持高速增长。 &a…

【数据结构系列】链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

异常(下)Java常见异常,异常的使用原则

文章目录 前言一、Java常见异常 1.常见异常2.实例展示二、异常的使用原则总结 前言 该文介绍了Java的一些常见异常,并给出对应的例子进行解释。介绍异常的使用原则,即创建,抛出异常的编程规范。 一、Java常见异常 前要:Java API中…

sklearn机器学习库(一)sklearn中的决策树

sklearn机器学习库(一)sklearn中的决策树 sklearn中决策树的类都在”tree“这个模块之下。 tree.DecisionTreeClassifier分类树tree.DecisionTreeRegressor回归树tree.export_graphviz将生成的决策树导出为DOT格式,画图专用tree.export_text以文字形式输出树tree.…

Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙…

基于YOLOv8+PyQt5开发的行人过马路危险行为检测告警系统(附数据集和源码下载)

系列文章目录 文章目录 系列文章目录前言欢迎来到我的博客!我很高兴能与大家分享关于基于YOLOv8的行人过马路危险行为检测告警系统的内容。 一、系统特点1. 采用最新最优秀的目标检测算法YOLOv82. 系统分别基于PyQt5开发了两种GUI图形界面,供大家学习使用…

consul安装启动流程

普通软件包安装 首先cd /opt ,将安装包放到该目录下 下载consul安装包 进入consul官网找到自己开发平台对应的安装包下载 https://www.consul.io/downloads.html 或使用命令 wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip (如果…

解决lldb调试时可能出现的personality set failed: Function not implemented

最近在尝试使用Visual Studio 2022远程连接Linux进行C/C的开发,由于CentOS风波不断,所以现在的开发基本上都是使用ubuntu了,但是目前VS2022有一些BUG,就是远程调试时,如果目标系统是ubuntu则会出现启动调试器很慢的问题…

js设置css变量控制页面一行展示指定个数的元素

前置知识: CSS变量之var()函数的应用——动态修改样式 & root的使用 flex相关知识 场景: 动态设置给父元素内子元素设置每行排列几个 通过 document.body.style.setProperty(--itemNum, 5)设置样式变量,然后通过给父元素设置display: f…

PyQt5的信号与槽函数

目录 一、介绍 二、一个信号连接一个槽 三、一个信号连接多个槽 四、多个信号连接一个槽 五、自定义信号 1、创建自定义信号 2、让自定义信号携带值 一、介绍 在下图中 (1)widget就是PyQt中的控件对象。其实就是组件(2)…

uniapp 用 hbuilderx下载 uview

uView2.0重磅发布,利剑出鞘,一统江湖 - DCloud 插件市场 1.uniapp官网下载资源 2按下载 3.官网安装文档 要按 这个红色圈错了 然后看他的配置步骤 第四easycom 就可以 不用配了

Linux MQTT智能家居(温度,湿度,环境监测,摄像头等界面布局设置)

文章目录 前言一、温度湿度曲线布局二、环境监测界面布局三、摄像头界面布局总结 前言 本篇文章来完成另外三个界面的布局设置。 这里会使用到 feiyangqingyun的一些控件库。 一、温度湿度曲线布局 TempHumtiy.h: #ifndef TEMPHUMTIY_H #define TEMPHUMTIY_H#include <…

Java-运算符和控制语句(上)(基于c语言的补充)

算术运算符 关于求余 不管分子&#xff0c;分母是正还是负&#xff0c;对于分母&#xff0c;直接取正&#xff1b;对于分子若有负号&#xff0c;则先提取出来&#xff1b;剩下两个正的分子分母运算&#xff1b;最后&#xff0c;若刚才的分子有负号&#xff0c;对最后的结果添加…

[C语言] 指针

1. 指针是什么 2. 指针和指针类型 3. 野指针 4. 指针运算 5. 指针和数组 6. 二级指针 7. 指针数组 目录 1. 指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 4. 指针运算 4.1 指针…

第三课-界面介绍SD-Stable Diffusion 教程

前言 我们已经安装好了SD&#xff0c;这篇文章不介绍难以理解的原理&#xff0c;说使用。以后再介绍原理。 我的想法是&#xff0c;先学会画&#xff0c;然后明白原理&#xff0c;再去提高技术。 我失败过&#xff0c;知道三天打鱼两天晒网的痛苦&#xff0c;和很多人一样试了…

Windows - UWP - 网络不好的情况下安装(微软商店)MicrosoftStore的应用

Windows - UWP - 网络不好的情况下安装&#xff08;微软商店&#xff09;MicrosoftStore的应用 前言 UWP虽然几乎被微软抛弃了&#xff0c;但不得不否认UWP应用给用户带来的体验。沙箱的运行方式加上微软的审核&#xff0c;用户使用起来非常放心&#xff0c;并且完美契合Wind…

一百四十九、Kettle——Linux上安装的kettle8.2创建共享资源库时遇到的问题(持续更新中)

一、目的 在kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后开始创建共享资源库&#xff0c;但是遇到了一些问题 二、Linux系统以及kettle版本 &#xff08;一&#xff09;Linux&#xff1a;CentOS 7 英文的图形化界面模式 &#…
最新文章