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

Python爬虫入狱小技巧

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

一、整体思路

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

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()

相关文章:

  • java中判断集合是否为空
  • Vitepress搭建组件库文档(下)—— 组件 Demo
  • 计算多张图片的移位距离
  • 一起啃西瓜书(四)
  • 贪婪算法(Huffman编码)
  • 在Windows使用VSCode搭建嵌入式Linux开发环境
  • 嵌入式C语言编程中经验教训总结(七)指针、指针数组和数组指针
  • 表哥月薪22k+,而我还在混日子……
  • 【饭谈】在学习测开网课之前,你的心脏需要武装一下
  • Jetson Agx Xavier平台ov5693 glass-to-glass 延时测试
  • C++ 命名类型转换
  • 【定制项目】【M15 消防安全宣传】【横屏版】主要模块:视频 + 音频 + 图标 + 问答游戏
  • 在 Linux 中使用 tcp 转储命令来分析网络
  • 结合viewBinding实现RecyclerView组件的滚动列表显示
  • 【C++】STL——stack和queue(万字详解)
  • JavaScript 如何正确处理 Unicode 编码问题!
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • css系列之关于字体的事
  • java8-模拟hadoop
  • Vue全家桶实现一个Web App
  • WinRAR存在严重的安全漏洞影响5亿用户
  • Zsh 开发指南(第十四篇 文件读写)
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 马上搞懂 GeoJSON
  • 如何使用 JavaScript 解析 URL
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 世界上最简单的无等待算法(getAndIncrement)
  • 学习JavaScript数据结构与算法 — 树
  • 用element的upload组件实现多图片上传和压缩
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #android不同版本废弃api,新api。
  • $(selector).each()和$.each()的区别
  • (3)llvm ir转换过程
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)二分查找 超详细
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (三)uboot源码分析
  • (未解决)macOS matplotlib 中文是方框
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .NET Core 成都线下面基会拉开序幕
  • .NET DataGridView数据绑定说明
  • .NET 设计模式初探
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET性能优化(文摘)
  • // an array of int
  • [2016.7 test.5] T1
  • [bzoj1038][ZJOI2008]瞭望塔
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]