Python爬虫入狱小技巧

news2024/11/18 21:41:19

在这里插入图片描述
呀,来坐牢的是吧,坐牢是不可能坐牢的,骚年,下面就是方法,早上学,晚上进去

一、整体思路

爬虫一开始要把思路理清楚,即从网页源代码或者网页数据接口,获取需要的数据.大致思路如下

1.有数据接口,直接用requests获取json文件源代码,然后字典操作获取数据

2.没有数据集接口:

1)通过requests获取源代码,通过三大方法解析数据

2)通过selenium获取源代码,通过三大方法解析数据

3.伪装:

1)user-agent主要用于获取源代码时,网站防爬虫伪装浏览器

2)cookie主要用于账号登陆,伪装身份登录网站

3)代理ip用于访问网站被封ip后,用其他地址进入网站获取数据

4.文件保存:把文件长期保存,便于后期调用,搭建数据库

在这里插入图片描述

二、登录

1.user-agent:通过如图获取(图片敏感,删了):

进入网页
检查网页
点击network
All
刷新网页
选择网页的那个点
Headers
寻找user-agent

2.cookie获取:如图获取(图片敏感,删了):

进入网页
检查网页
点击network
All
选择网页的那个点
Headers
寻找cookie

3.代理ip使用:

1).requests:

headers = {xxx}
proxies = {'https': '代理ip'}
response = requests.get('网站地址', headers=headers, proxies=proxies)

2).selenium:

from selenium.webdriver import Chrome, ChromeOptions

# 1. 给浏览器添加配置
options = ChromeOptions()
#设置代理
options.add_argument('--proxy-server=http://171.83.191.223:4526')
b = Chrome(options=options)
b.get('网站')

三、有数据接口:

1.获取数据接口

在preview中观察比较像数据接口的点,选择最像字典,而且有数据的点
在这里插入图片描述
确定哪个是自己想要的数据接口后,点击他的Headers,然后获取Request URL
在这里插入图片描述

2.进入接口,转json解析

import requests
response = requests.get('数据接口')
# 接口数据转字典
result = response.json()
# 遍历获取的字典数据中newlist键下面title键的值
for x in result['newslist']:
   print(x['title'])

四、无数据接口

1.requests

1)bs4数据解析

创建BeautifulSoup生成对象

import requests
from bs4 import BeautifulSoup
headers = {'user-agent': 'xxx'}
response = requests.get('网站', headers=headers)
html = response.text
soup = BeautifulSoup(html, 'lxml')

基于css选择器解析数据:获取标签 -> 获取标签内容和标签属性
1)获取标签
BeautifulSoup对象.select(css选择器) - 获取整个网页中css选择器选中的所有标签;返回一个列表,列表中元素是标签对象
BeautifulSoup对象.select_one(css选择器) - 获取整个网页中css选择器选中的第一个标签;返回一个标签对象
标签对象.select(css选择器) - 获取指定标签中css选择器选中的所有标签
标签对象.select_one(css选择器) - 获取指定标签中css选择器选中的第一个标签

2)获取标签内容和标签属性
标签对象.text - 获取标签内容
标签对象.attrs[属性名] - 获取指定标签中指定属性的值

例如下面提取

div_list = soup.select('.grid_view>li>.item')
print(div_list)
for div in div_list:
    title = div.select_one('.title').text
    comment = div.select('.star>span')[-1].text
    score = div.select_one('.star>.rating_num').text
    print(title, comment, score)

2)xpath数据解析

创建xpath数据生成对象

import requests
from lxml import etree
headers = {xxx}
response = requests.get('网站', headers=headers)
root = etree.HTML(response.text)

例如下面提取

all_div = root.xpath('//ol[@class="grid_view"]/li/div')
for x in all_div:
    name = x.xpath('./div[@class="info"]/div[1]/a/span[1]/text()')[0]
    score = x.xpath('./div[@class="info"]/div[2]/div/span[2]/text()')[0]
    print(name, score)

2.selenium

1)bs4数据解析

创建BeautifulSoup生成对象

from selenium.webdriver import Chrome
from bs4 import BeautifulSoup
# 1.创建浏览器,打开网站
b = Chrome()
b.get('网站')

# 滚动操作
b.execute_script('window.scrollBy(0, 800)')
# 关闭图片加载
options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})
# 取消测试环境
options.add_experimental_option('excludeSwitches', ['enable-automation'])

# 2. 获取网页源代码
html = b.page_source
# 3. 关闭浏览器
b.close()

soup = BeautifulSoup(html, 'lxml')
# 接下来就是与上面相同,用bs4解析

2)selenium按钮和输入操作

# 2.通过浏览器获取想要控制的标签
# b.find_element_by_id(id属性值)       -   获取当前页面中id属性值为指定值的标签
# b.find_element_by_class_name(class属性值)        -   获取当前页面中class属性值为指定值的第一个标签
# b.find_element_by_css_selector(css选择器)    -   在当前页面中获取css选择器选中的第一个标签
# b.find_elements_by_class_name(class属性值)        -   获取当前页面中所有class属性值为指定值的标签, 返回一个列表
# b.find_elements_by_css_selector(css选择器)    -   在当前页面中获取css选择器选中的所有标签,返回一个列表
input_tag = b.find_element_by_id('key')
seckill = b.find_elements_by_class_name('navitems-lk')[2]

# 3. 操作标签
# 标签对象.click()      -       点击指定标签
# seckill.click()

# 标签对象.send_keys(想要输入的内容)       -       控制输入框输入指定内容
# input_tag.send_keys('电脑\n')
seckill.click()

3)xpath数据解析

创建xpath数据生成对象

import requests
from lxml import etree
headers = {xxx}
response = requests.get('网站', headers=headers)
root = etree.HTML(response.text)

五、文件保存

图片保存

import  requests
x='https://ossweb-img.qq.com/images/clientpop/act/lol_1666321648_uploadnewsImg.jpg'
img_response = requests.get(x)
f = open(f'1.jpeg', 'wb')
f.write(img_response.content)
f.close()

文件夹建立

import  os

if not os.path.exists('bad'):
        os.mkdir('bad')

csv数据保存

import csv

f = csv.writer(open('files/students1.csv', 'w', encoding='utf-8',newline=''))
# 一次写一行
f.writerow(['姓名', '年龄', '性别', '电话'])
# 一次写入多行数据
writer1.writerows([
    ['小花', 20, '女', '120'],
    ['张三', 30, '男', '119']
				 ])

txt保存

f = open('a.txt', 'w', encoding='utf-8')
f.write('你好!')
f.close()

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

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

相关文章

【Java进阶】JUC并发基础

文章目录1.概念1.1 什么是JUC1.2 线程与进程1.3 线程的几种状态1.4 守护线程1.5 死锁与活锁1.6 乐观锁与悲观锁1.7 自旋锁2.Lock2.1 使用Lock2.2 Lock与Synchronized2.3 虚假唤醒3.八锁问题3.1 创建一个Phone实例多线程调用两个方法3.2 创建一个Phone实例多线程调用两个方法&am…

基于热传导矩阵(HCM)边缘检测方法在红外图像中的应用(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

3道真题训练|学会链表的前世今生

🙋很多朋友都问我学完基础知识以后怎样提高编程水平?当然是刷题啦!很多小伙伴都在纠结从哪里开始,今天给大家推荐一个身边朋友都在使用的刷题网站:点击进入牛客网刷题吧! 🙋‍♂️今天是Java …

中文文本分类,基本模型的pytoch实现

学习说明:最近发现了一个宝藏仓库,将常见的文本分类方法做了一个介绍、及封装。现在将学习这仓库的一些笔记记录如下 参照资料 649453932/Chinese-Text-Classification-Pytorch: 中文文本分类,TextCNN,TextRNN,FastT…

宣布 .NET MAUI 支持 .NET 7 Release Candidate 2

支持 .NET 7 Release Candidate 2的 .NET 多平台应用程序 UI (MAUI) 现在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主题是质量和对带有 iOS 16 的 Xcode 14 的 .NET 支持。此版本包含在生产中使用的上线支持许可证。 在相关新闻中&#xff0…

Linux 内存node和zone

文章目录前言一、内存模型二、(N)UMA2.1 简介2.2 节点2.3 UMA节点与Flat Memory Model2.4 zone2.4.1 zone2.4.2 zone_type参考资料前言 一、内存模型 所谓memory model,其实就是从cpu的角度看,其物理内存的分布情况,…

图解操作系统-cpu cache

不同物理器件的访问速度不一:速度快的代价高、容量小;代价低且容量大,速度较慢。 为充分发挥各种器件优点,计算机存储数据的物理器件不会只选择一种,而是以CPU为核心,由内而外地组建一整套存储体系结构。它…

亿可控_第2章_指标数据采集与断连监控

亿可控_第2章_指标数据采集与断连监控 文章目录亿可控_第2章_指标数据采集与断连监控第2章 指标数据采集与断连监控学习目标1. EMQ指标主题订阅1.1 Eclipse paho简介1.2 发送与订阅消息1.2.1 发送消息1.2.2 订阅消息1.3 订阅指标主题1.3.1 需求分析1.3.2 实现思路1.3.3 代码实现…

23模式---单例模式

单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例) 这个也是23设计模型中最…

Python 图像处理OpenCV:几何变换(笔记)

包括图像缩放、图像平移、图像旋转、图像的仿射变换、图像的透射变换及图像金字塔等内容。 图像缩放: 缩放是对图像的大小进行调整,即使图像放大或缩小。cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)src : 输入图像dsize: 绝对尺寸&a…

Linux运维面试题总结—Linux基础、计算机网络基础

文章目录一、三次握手四次挥手二、如何划分vlan三、为什么划分vlanvlan三个模式:vxlan和vlan区别是什么?四、OSI七层模型及对应协议五、Linux中 查找大于10M的文件并删除六、查看cup占用情况,查看内存,查看磁盘IO使用情况&#xf…

图像处理黑科技——弯曲矫正、去摩尔纹、切边增强、PS检测

目录0 前言1 弯曲矫正2 去摩尔纹3 图像切边增强4 PS检测5 总结0 前言 合合信息是行业领先的人工智能及大数据科技企业,专注文字识别领域16年,在智能文字识别及商业大数据等核心领域处于国内领先地位,全球企业和个人用户提供创新的数字化、智…

代码随想录动态规划——一和零

题目 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:strs [“10…

Oracle Unifier 系统架构简述(安装部署)

关于Oracle Primavera Unifier 的应用架构,其实在我之前的博客已有介绍相关内容 谈谈 Oracle P6 , Unifier 和其他应用系统间的联系https://campin.blog.csdn.net/article/details/104972949 从官方文档方面,其实在《unifier_performance_and_sizing_g…

【C语言】全面解析数据在内存中的存储

文章目录前言类型的基本分类整型浮点数自定义类型整型在内存中的存储原码、反码、补码大端和小端如何判断编译器是大端还是小端浮点数在内存中的存储总结前言 C语言中有char、short、int、long、long long、float和doubole这些数据类型。这些数据类型也叫内置类型。 所占存储空…

JECloud微服务低代码平台重大发布。

JECloud微服务低代码平台【1.0.0】版升级发布,本次发布内容如下: JECloud微服务低代码平台是一款基于元数据领域模型构建的低代码开发平台,其底层采用微服务与微应用构建底层框架,并基于基础框架构建各核心微服务模块来实现低代码…

手撕七大排序 (四)

归并排序归并排序递归写法一. 基本概念二. 图解归并排序递归写法 一. 基本概念 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并…

数据结构与算法——链表(双向链表,顺序表与链表的比较)

🍓个人主页:bit.. 🍒系列专栏:Linux(Ubuntu)入门必看 C语言刷题 数据结构与算法 目录 一.双向链表 二.双向链表的对称性:(设指针p指向某一结点) 1.双向链表的插入 2.双向链表的删除 …

浏览器中的页面循环系统

【】渲染进程中有个主线程处理安排好的任务,为了在线程运行过程中接收并处理新任务,引入了事件循环机制;为了处理其他线程发送来的任务,引入消息队列;为了处理其他进程发送来的任务,渲染进程专门有一个IO线…

【数据结构初阶】二、顺序表的实现

目录 一、线性表 二、顺序表 2.1 顺序表概念及结构 2.2 顺序表接口实现 2.2.1 顺序表初始化 2.2.2 顺序表的销毁 2.2.3 顺序表的打印 2.2.4 顺序表增加数据(插入,头插、尾插) 2.2.5 顺序表删除数据(删除,头删…