爬虫知识--03

数据存mysql

import requests
from bs4 import BeautifulSoup
import pymysql# 链接数据库pymysql
conn = pymysql.connect(user='root',password="JIAJIA",host='127.0.0.1',database='cnblogs',port=3306,
)
cursor = conn.cursor()
cursor = conn.cursor()# 爬数据
res = requests.get('https://www.autohome.com.cn/news/1/#liststart')
# print(res.text)# 引入解析库
soup = BeautifulSoup(res.text, 'html.parser')
ul_list = soup.find_all(name='ul', class_='article')
for ul in ul_list:li_list = ul.find_all(name='li')for li in li_list:h3 = li.find(name='h3')if h3:title = h3.textcontent = li.find('p').texturl = 'https:' + li.find(name='a').attrs['href']img = li.find('img')['src']que = 'https:'if que not in img:img = que + imgprint('''文章标题:%s文章摘要:%s文章链接:%s文章图片:%s''' % (title, content, url, img))# 把图片下载到本地img_res = requests.get(img)with open('./img/' + img.split('/')[-1], 'wb') as f:for line in img_res.iter_content():f.write(line)# 存入数据库cursor.execute("INSERT INTO news (title,content,img,url) VALUES (%s,%s,%s,%s)",args=[title, content, img, url])conn.commit()

上传cnblogs图片

import requestsheader = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0','Referer': 'https://i.cnblogs.com/ngsw-worker.js','Cookie': '_ga_K9ZHTBGT3Z=GS1.2.1702215735.1.0.1702215735.0.0.0; __gads=ID=5a6b96e7dce231d8:T=1700637208:RT=1706056779:S=ALNI_MYRXZOHhBLLyQzpN1We4NUdfMGYQQ; __gpi=UID=00000c93f4b05ac4:T=1700637208:RT=1706056779:S=ALNI_MatObgQktmbem_0SXLJiayLziRINg; cto_bundle=m0Ggk19mR1BnZTB1dExyaHNvT01CN1dQM0RISU9WUUtIZXVsRW43OXpxJTJCM2ZRMEpncWxtRUpqUiUyRnJ4TkdJQTFlWWdJcWUlMkZub2I4ZWQ1M0w3bk9YRjFmSVozNFBZaFp1MkJEeDhMMjZCc1R4YTFLanNXVVhyNGZIOHJpUGpEREZUJTJGMG9pTmI3YURQWWQ3enlTVVVaY3RoNXNVQSUzRCUzRA; _ga_7DSFGJNPL4=GS1.1.1708417388.1.0.1708417388.0.0.0; Hm_lvt_866c9be12d4a814454792b1fd0fed295=1706056778,1708328454,1708521052; _ga=GA1.1.1528785063.1700619377; .AspNetCore.Antiforgery.b8-pDmTq1XM=CfDJ8DZoAyJmInJHoSwqM1IbzdQjW57WAADzO55EUBOrBFTDFAwXvmddFdsOwcd91uR9v1A23sMz6-hAGYwVrJHEH5c21hYY0xIfJ0-q3IBRlH4fIIoIFR2YMrT0AFNY6FN6LMlo2UEaQP9bnNUglQExnvY; .Cnblogs.AspNetCore.Cookies=CfDJ8DZoAyJmInJHoSwqM1IbzdTqIZnOOklAz_Oo1-ESSjFQVR0Sus_rZ18eCIcP-akb1YjYH-Uic23MF7u9RZHFjwmkhNbiUWC7xbFsYnzTcgu-nLsl5S6ZxcwEU3JGwjspeBFIqJ6kAA52NE1KnJKSkjvgKyfQL4FTAWpP6W7djbWxgFRsMY_eHqjRRS6L0-6dGePy8BFcwCNKm8yfVDN_wgKlsW6AztrWX9UB00sjnrBp0-QmK13o4qf8uLCw4eznsmlPWv_X1F6cNkp1Y6KODCznqgBcsOybycWBKS9vV2uIQ6-36t6HHxqNxL8ChBv73C3rTKfUtSMtLVYtBBE-goLnnqoVTfHqPAdhtj7USyVivYiEcBWAZrEScJ0kJy_9_yyMKiSIgjpOD7aQzzhD1U13tgnOO9ukBjSL-DH8BMODa7dcjfVlkm_8_osfLiwl7Y7oUTlxkIfIhTex2gyUsTIeWuvxRjOG-1kunQwCKpf6r2pZ_zmchTeWtg0hmR8FrHSH0JiT0GiQJZx7RBUZj3RmFfffkHanyu2KGXzMF_ekixBdCpzYAie5TkbQk1uHKoKrAMgdrGBWvRetLEcXfBoDtYgAmw3yDzLavMmVM1Ue; .CNBlogsCookie=4CC9FDFAB5122BA83534E90C476C1A6247EAF22D393555C1F9B6AA6247A9015208A126D736C7FD60A945836247262F06D289A6B0BF8B8B0E2981F8291311DD502E97F3DBD91ECD511D3EAF92566F14674A86FB9B; _ga_3Q0DVSGN10=GS1.1.1708521056.3.1.1708521352.28.0.0; Hm_lpvt_866c9be12d4a814454792b1fd0fed295=1708521353; _ga_M95P3TTWJZ=GS1.1.1708521052.31.1.1708521356.0.0.0; XSRF-TOKEN=CfDJ8DZoAyJmInJHoSwqM1IbzdRGjy4Kotcb_jOERQehTlGIpqZdhn-Zue6X3BLKyWSLj8cJCfqtCnXEFdWPWy1OLD64D1M7CWuHNCnJDZYsyExMi6EjFarOowjQTTuyzlGLPgG-6TnhkfDNGW1xsjqEuzDuINZ_HRV_fC0k_-nPEvGEU_bOuPqJXS3X6F7tGa0DwA; _ga_C2LFP3RFGH=GS1.1.1708521243.1.1.1708521421.0.0.0'
}files = {'imageFile': ("55.png", open('55.png', 'rb'), "image/jpeg"),'host': 'www.cnblogs.com','uploadType': 'Paste'
}res = requests.post('https://upload.cnblogs.com/imageuploader/CorsUpload', headers=header,  files=files)
print(res.text)

selenium介绍

# 原由:由于requests不能执行js

             requests会逐个分析 ajax请求,模拟发送获取数据
             使用requests爬取的数据  很大概率跟在浏览器中看到的不一样
# 介绍:selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题

# 本质:selenium是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果(跟咱们在浏览器看到的完全一致),支持多种浏览器

# 使用:
    1、确认好,我们要驱动什么浏览器,我们用谷歌
    2、下载一个浏览器驱动:驱动版本跟谷歌浏览器要对应
        122.0.6261.58 ----https://googlechromelabs.github.io/chrome-for-testing/
        win平台是:chromedriver.exe
    3、把驱动放在环境变量下,项目根路径下


    4、安装selenium 模块   pip install selenium
    5、写代码

from selenium import webdriver
import timebro = webdriver.Chrome()     # 手动打开了浏览器
bro.get('https://www.baidu.com')    # 在浏览器中输入要访问的网址,并访问
time.sleep(5)
bro.close()    # 关闭浏览器

# 如果是:122.0.6261.57这个版本,安装包如下:
        https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.57/win64/chromedriver-win64.zip

selenium模拟登录

import time
from selenium import webdriver
from selenium.webdriver.common.by import Bybro = webdriver.Chrome()   # 手动打开了浏览器bro.get('https://www.baidu.com')
# 设置等待 10s--->找标签,如果找不到--会最多等待10s钟
bro.implicitly_wait(10)# 屏幕最大
bro.maximize_window()# 选择器---》找标签
# submit_btn=bro.find_element(by=By.ID,value='s-top-loginbtn') # 通过id找的
submit_btn = bro.find_element(by=By.LINK_TEXT, value='登录')  # 通过a标签的文字找
submit_btn.click()   # 点击标签# 点击短信登录---》睡3s钟
sms_submit = bro.find_element(By.ID, 'TANGRAM__PSP_11__changeSmsCodeItem')
sms_submit.click()
time.sleep(3)# 点击账号登录
username_submit = bro.find_element(By.ID, 'TANGRAM__PSP_11__changePwdCodeItem')
username_submit.click()
time.sleep(3)# 找到账号和密码---》输入
username = bro.find_element(By.ID, 'TANGRAM__PSP_11__userName')
username.send_keys('19856014525')  # 向输入框中写内容
time.sleep(1)password = bro.find_element(By.ID, 'TANGRAM__PSP_11__password')
password.send_keys('19856014525')  # 向输入框中写内容
time.sleep(1)# 点击接受---》点击登录
accept = bro.find_element(By.ID, 'TANGRAM__PSP_11__isAgree')
accept.click()
time.sleep(1)submit = bro.find_element(By.ID, 'TANGRAM__PSP_11__submit')
submit.click()
time.sleep(5)bro.close()

无头浏览器

# 概念:无头浏览器是不加载页面也可以执行浏览器中的操作

# 过程:会去环境变量找驱动,找的过程比较慢,但是找到过一次,再运行就快了
# 这个是谷歌浏览器可执行文件的位置(可以不配, 环境变量中有)

        指定驱动的位置,具体需要参照文档

# options.binary_location = r"C:\Users\oldboy\AppData\Local\Google\Chrome\Application\chrome.exe"
# options.xx='D:\Python27\crawl_day03\chromedriver.exe'
from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.add_argument('blink-settings=imagesEnabled=false')  # 不加载图片, 提升速度
options.add_argument('--headless')  # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败bro = webdriver.Chrome(options=options)
bro.get('https://www.cnblogs.com/liuqingzheng/p/16005896.html')print('破解知乎登陆' in bro.page_source)
print(bro.page_source)

搜索标签

# 搜索标签:

By.ID    # 根据id号查找标签
By.NAME    # 根据name属性查找标签
By.TAG_NAME    # 根据标签查找标签
By.CLASS_NAME # 按类名找
By.LINK_TEXT   # a标签文字
By.PARTIAL_LINK_TEXT  # a标签文字,模糊匹配
By.CSS_SELECTOR # 按css选择器找
By.XPATH    #按xpath找

# 标签属性,位置,大小,文本:

import time
from selenium import webdriver
from selenium.webdriver.common.by import Bybro = webdriver.Chrome()
bro.get('https://www.cnblogs.com/liuqingzheng/p/16005896.html')
bro.implicitly_wait(10)
bro.maximize_window()
# bro.find_element() # 找一个
# bro.find_elements() # 找所有# 1 按id找---找到点赞---》点击它--->使用id找
number=bro.find_element(By.ID,'digg_count')
number.click()#2 按标签名找   找出页面中所有a标签  按标签名找
a_list=bro.find_elements(By.TAG_NAME,'a')
print(len(a_list))# 3 按类名找
dig=bro.find_element(By.CLASS_NAME,'diggit')
dig.click()# 4 按 a 标签 文字找 By.LINK_TEXT
res=bro.find_element(By.LINK_TEXT,'分布式爬虫')
print(res.text)
# print(res.get_attribute('href'))
# res.click()# 5 a标签文字,模糊匹配  By.PARTIAL_LINK_TEXT
res=bro.find_element(By.PARTIAL_LINK_TEXT,'分布式')
print(res.text)
# print(res.get_attribute('href'))
# res.click()# 6 css 解析
res=bro.find_element(By.CSS_SELECTOR,'a#cb_post_title_url>span')
res=bro.find_element(By.CSS_SELECTOR,'#cb_post_title_url > span')
print(res.get_attribute('role'))
print(res.text)# 7 xpath解析--->不会xpath语法
res=bro.find_element(By.XPATH,'//*[@id="cb_post_title_url"]/span')
print(res.get_attribute('role'))
print(res.text)time.sleep(5)
bro.close()

等待元素

# 1、隐士等待:等待标签加载好               

# 原由:在find_element 找标签时,代码执行很快,标签可能还没加载出来,取不到会报错

# 设置隐士等待:   bro.implicitly_wait(10)  

        加了这一句,当取标签时,如果标签没加载好,等待最多10s

        等标签加载出来后,找到了继续往后走

# 2、显示等待(不好用)
    每找一个标签,都要给它设置一次等待
# 以后,都在访问到某个地址后,加入这句话即可        bro.implicitly_wait(10)

执行js

bro.execute_script('js代码')

import time
from selenium import webdriver
from selenium.webdriver.common.by import Bybro = webdriver.Chrome()
bro.get('https://www.pearvideo.com/category_1')
bro.implicitly_wait(10)
bro.maximize_window()
# 1 基本使用
bro.execute_script('alert("美女")')# 2 打印出一些变量
bro.execute_script('console.log(urlMap)')
bro.execute_script('alert(JSON.stringify(urlMap))')# 3 新建选项卡
bro.execute_script('open()')# 4 滑动屏幕
bro.execute_script('scrollTo(0,document.documentElement.scrollHeight)')# 5 获取当前访问地址
bro.execute_script('alert(location)')
bro.execute_script('location="http://www.baidu.com"')# 6 打印cookie
bro.execute_script('alert(document.cookie)')time.sleep(10)
bro.close()

选项卡

打开选项卡(通过执行js):bro.execute_script('open()')
切换到某个选项卡:bro.switch_to.window(bro.window_handles[1])
关闭选项卡:bro.close()
关闭浏览器:bro.quit()

from selenium import webdriver
import time
bro = webdriver.Chrome()
bro.get('https://www.pearvideo.com/')
bro.implicitly_wait(10)
print(bro.window_handles)
# 开启选项卡
bro.execute_script('window.open()')
# 获取出所有选项卡bro.switch_to.window(bro.window_handles[1]) # 切换到第一个个选项卡
bro.get('http://www.taobao.com')time.sleep(2)
bro.switch_to.window(bro.window_handles[0]) # 切换到某个选项卡
bro.get('http://www.baidu.com')time.sleep(2)
bro.execute_script('window.open()')
bro.execute_script('window.open()')
bro.close() # 关闭选项卡time.sleep(2)
bro.quit()  # 关闭页面

模拟浏览器前进后退

前进:bro.forward()

后退:bro.back()    

from selenium import webdriver
import time
bro = webdriver.Chrome()
bro.get('https://www.pearvideo.com/')
bro.implicitly_wait(10)# 获取出所有选项卡
time.sleep(2)
bro.get('http://www.taobao.com')time.sleep(2)bro.get('http://www.baidu.com')
time.sleep(2)
bro.back()
time.sleep(2)
bro.back() # 前进
time.sleep(2)
bro.forward()  # 后退
bro.quit()  # 关闭页面

自动登录cnblogs

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
from selenium.webdriver.common.by import By# 去掉自动化软件控制的检测
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")  # 去掉自动化控制
bro = webdriver.Chrome(options=options)bro.get('https://www.cnblogs.com/')
bro.implicitly_wait(10)    # 等待十秒
bro.maximize_window()  # 屏幕最大化
login_btn = bro.find_element(By.LINK_TEXT, '登录')
login_btn.click()     # selenium自动点击登录按钮time.sleep(2)# 找到用户名和密码输入框
username = bro.find_element(By.CSS_SELECTOR, '#mat-input-0')
password = bro.find_element(By.ID, 'mat-input-1')submit_btn = bro.find_element(By.CSS_SELECTOR,'body > app-root > app-sign-in-layout > div > div > app-sign-in > app-content-container > div > div > div > form > div > button')
# 验证码
code=bro.find_element(By.ID,'rectMask')
time.sleep(1)username.send_keys('糖果爱上我125')
time.sleep(1)
password.send_keys('20020308Zjq.')
time.sleep(1)
submit_btn.click()  # 一种情况直接登录成功   一种情况会弹出验证码
code.click()
time.sleep(10)# 让程序先停在这---》手动操作浏览器---》把验证码搞好---》程序再继续往下走
# 到现在,是登录成功的状态
# 取出cookie存起来
cookies = bro.get_cookies()
with open('cnblogs.json', 'w', encoding='utf-8') as f:json.dump(cookies, f)time.sleep(2)
bro.close()

今日思维导图:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT Plus遇到订阅被拒原因与解决方案

ChatGPT Plus被广泛认为相比普通版本更快、更强,并且能最先体验新功能。 很多小伙伴再订阅时遇到图片中的问题 错误提示包括这些: Your credit card was declined.Try paying with a debit card instead.您的信用卡被拒绝了。请尝试用借记卡支付。你的…

Android 圆环带刻度条进度动画效果实现

效果图 需求是根据传感器做一个重力球效果,先实现了动画后续加上跟传感器联动. 又是摆烂的一天, 尚能呼吸,未来可期啊 View源码 package com.android.circlescalebar.view;import android.content.Context; import android.content.res.Typ…

【Crypto | CTF】BugKu 简单的RSA

天命:这题也不算简单了,要反编译,要灵活一点 首先收到pyc文件,拿去反编译出来,可以用在线反编译,也可以用工具反编译 在线:python反编译 - 在线工具 工具:https://download.csdn.n…

RocketMQ快速实战以及集群架构原理详解

RocketMQ快速实战以及集群架构原理详解 组成部分 启动Rocket服务之前要先启动NameServer NameServer 提供轻量级Broker路由服务,主要是提供服务注册 Broker 实际处理消息存储、转发等服务的核心组件 Producer 消息生产者集群,通常为业务系统中的一个功…

华清远见作业第四十一天——Qt(第三天)

思维导图: 编程 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如…

利用iSCSI服务部署IP SAN网络存储服务

一、配置环境(Vmware WorkStation虚拟环境) 服务端与客户端OS:openEuler 22.03-LTS CPU:1U1C 内存:2G 硬盘:5个SCSI磁盘,其中一个作为系统盘,另外四个配置为RAID5阵列 服务器IP…

【黑马程序员】1、TypeScript介绍_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址:【黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 1、TypeScript介绍 1.1 TypeScript是什…

React 模态框的设计(三)拖动组件的完善

我在上次的Draggable组件的设计中给了一个简化的方法,今天我来完善一下这个组件,可用于任何可移动组件的包裹。完善后的效果如下所示: 这个优化中,增加了一个注目的效果,还增加了触发可拖动区域的指定功能,…

pikachu靶场-RCE

介绍: RCE(remote command/code execute)概述 RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命…

2024“薪”风口、学习鸿蒙开发就业钱景如何?

随着华为的鸿蒙系统从诞生之初就备受关注,对于那些对鸿蒙开发感兴趣并希望在这一领域寻找职业发展的人来说,这是一个非常重要的问题。 那么,2024年学鸿蒙开发的就业前景如何呢? 一、彻底摆脱“安卓套壳”! HarmonyO…

我用Python写了一个倒计时软件

人过中年,每天都觉得时间过得很快,忙活了一天却发现自己很多时候是瞎忙,似乎没有什么成效,匆忙中一天就过去了。 后来,我想想可能是我没有时间的紧迫感,或者说没有明确的目标和执行力,所以才会…

LeetCode94.二叉树的中序遍历

题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 : 输入:root [1,null,2,3] 输出:[1,3,2] 思路 中序遍历的顺序是左子树 -> 根节点 -> 右子树。因此,我们可以通过递归的方式遍历二叉树&…

人工智能在测绘行业的应用与挑战

目录 一、背景 二、AI在测绘行业的应用方向 1. 自动化特征提取 2. 数据处理与分析 3. 无人机测绘 4. 智能导航与路径规划 5. 三维建模与可视化 6. 地理信息系统(GIS)智能化 三、发展前景 1. 技术融合 2. 精准测绘 3. 智慧城市建设 4. 可…

window: C++ 获取自己写的dll的地址

我自己用C写了一个插件,插件是dll形式的,我的插件式在dll的目录下有个config文件夹,里面是我用json写的插件配置文件,当插件运行的时候我需要读取到json配置文件,所有最重要的就是如何获取dll的路径. 大概就是这么个结构, 我自己封装了一个函数.只适用于window编程,因为里面用…

TCP/IP协议详解

文章目录 TCP/IP协议概述基于TCP/IP协议的应用工具协议协议的必要性 TCP/IP协议TCP/IP协议族协议的分层 传输方式的分类报文、帧、数据包等的区别TCP 和 UDP的区别 TCP/IP协议概述 TCP/IP(Transmission Control Protocol/Internet Protocol)是一组通信协…

Chrome插件精选 — 缓存清理

Chrome实现同一功能的插件往往有多款产品,逐一去安装试用耗时又费力,在此为某一类型插件挑选出比较好用的一款或几款,尽量满足界面精致、功能齐全、设置选项丰富的使用要求,便于节省一个个去尝试的时间和精力。 1. Chrome清理大师…

maven 打包命令

Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。 Maven的核心功能便是合理叙述项目间的依赖关系,通俗点讲,就是通过po…

【程序员必备技能】Git入门

目录 🌈前言🌈 📁 Git的概念 📂 版本控制 📂 集中式 和 分布式 ​ 📁 创建和配置本地仓库 📁 理解工作区,暂存区,版本库 📁 Git的基本操作 📂…

论文阅读:How Do Neural Networks See Depth in Single Images?

是由Technische Universiteit Delft(代尔夫特理工大学)发表于ICCV,2019。这篇文章的研究内容很有趣,没有关注如何提升深度网络的性能,而是关注单目深度估计的工作机理。 What they find? 所有的网络都忽略了物体的实际大小,而关注他们的垂直…

Seata分布式事务实战AT模式

目录 分布式事务简介 典型的分布式事务应用场景 两阶段提交协议(2PC) 2PC存在的问题 什么是Seata? Seata的三大角色 Seata AT模式的设计思路 一阶段 二阶段 Seata快速开始 Seata Server(TC)环境搭建 db存储模式Nacos(注册&配…