Python 爬虫之 requests模块(ua伪装、代理、cookies、防盗链 Referer)、re模块、xpath模块、selenium

这篇具有很好参考价值的文章主要介绍了Python 爬虫之 requests模块(ua伪装、代理、cookies、防盗链 Referer)、re模块、xpath模块、selenium。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python 爬虫

requests

下载

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

发送 get 请求

案例:百度

import requests

url = "http://www.baidu.com"

# 发送 get 请求
response = requests.get(url)

# 设置字符集 (根据爬取网页 charset=utf-8)
response.encoding = 'utf8'

# 获取网页源代码
print(response.text)

发送 post 请求

案例:百度翻译
python给request添加ua,Python,python,爬虫
python给request添加ua,Python,python,爬虫

import requests

url = "https://fanyi.baidu.com/sug"

# 搜索词
data = {
    "kw":"love"
}
# 发送 get 请求
response = requests.post(url,data)

# 如果返回值是 json 数据,可直接调用 json() 方法
print(response.json())

UA 伪装

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52"
}

response = requests.get(url, headers=headers)

代理

proxy = {
    "http": "121.233.212.34:3432"
}

response = requests.get(url, proxies=proxy)

cookies 登录

案例:17k小说网

import requests

sessions = requests.session()

url = 'https://passport.17k.com/ck/user/login'
data = {
    "loginName": "15675521581",
    "password": "**"
}
res = sessions.post(url, data=data)
# print(res.cookies)

result = sessions.get(url = 'https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919')
print(result.json())

防盗链 Referer

案例:梨视频

import requests

# 抓包的视频地址 https://video.pearvideo.com/mp4/short/20161103/1683211212907-10041181-hd.mp4
# 实际播放的地址 https://video.pearvideo.com/mp4/short/20161103/cont-1007270-10041181-hd.mp4
# 比较两个地址需要把抓包地址后面的时间戳替换为 cont-id
url = 'https://www.pearvideo.com/videoStatus.jsp?contId=1007270&mrd=0.2400885482825692'
refererUrl = "https://www.pearvideo.com/video_1007270"
contId = refererUrl.split('_')[1]

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    "Referer": refererUrl
}

res = requests.get(url, headers=headers)
# 抓包返回的数据
dict = res.json()
print(dict)
# 抓包返回的时间戳
systemTime = dict['systemTime']
# 抓包返回的视频地址
srcUrl = dict['videoInfo']['videos']['srcUrl']
# 地址处理
newUrl = srcUrl.replace(systemTime, f"cont-{contId}")
print(newUrl)

# 下载视频到本地
with open('test.mp4', mode='wb') as f:
    f.write(requests.get(newUrl).content)

re 模块

findall

import re

result = re.findall(r"\d+","今天写了2行代码,赚了200元。")
print(result) # ['2', '200'] 返回列表

search

import re

result = re.search(r"\d+","今天写了2行代码,赚了200元。")
print(result) # <re.Match object; span=(4, 5), match='2'> 只匹配第一个值,然后返回
print(result.group()) # 2  从 match 获取匹配的值

finditer

import re

result = re.finditer(r"\d+","今天写了2行代码,赚了200元。")
print(result) # <callable_iterator object at 0x000001B01E0DAE00> 把所有结果放在迭代器里

for item in result:
    #<re.Match object; span=(4, 5), match='2'> 2
    # <re.Match object; span=(11, 14), match='200'> 200
    print(item,item.group()) 

预加载

提前写好正则表达式

import re

obj = re.compile(r"\d+")

result = obj.findall("今天写了2行代码,赚了200元。")
print(result) # ['2', '200']

匹配换行 re.S

obj = re.compile(r"\d+",re.S)

在 html 中使用

import re

s = """
<div>
    <div><a href="http://www.baidu.com">Baidu</a></div>
    <div><a href="http://www.weixin.com">weixin</a></div>
</div>
"""
# 输出如下格式
# http://www.baidu.com Baidu
# http://www.weixin.com weixin

obj = re.compile(r'<div><a href="(.*?)">(.*?)</a></div>')

result = obj.finditer(s)
for item in result:
    print(item.group(1),item.group(2))

原子组使用别名

obj = re.compile(r'<div><a href="(?P<url>.*?)">(?P<title>.*?)</a></div>')

result = obj.finditer(s)
for item in result:
    print(item.group('url'),item.group('title'))

爬取豆瓣电影 https://movie.douban.com/chart

python给request添加ua,Python,python,爬虫

import requests
import re
url = 'https://movie.douban.com/chart'
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52"
}

response = requests.get(url, headers=headers,)
response.encoding = 'utf-8'
# re.S 可以让 re 匹配到换行符
obj = re.compile(r'<dl class="">.*?<dd>.*?<a .*?class="">(.*?)</a>',re.S)

content = obj.finditer(response.text)

for item in content:
    print(str(item.group(1)).strip())
# 哈利·波特与凤凰社
# 茶馆
# 喜剧之王
# 萤火虫之墓
# 少年派的奇幻漂流
# 上帝之城
# 疯狂原始人
# 机器人总动员
# 泰坦尼克号
# 谍影重重
# 红辣椒
# 神偷奶爸

xpath

lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 4 and head, line 6, column 8 错误

错误的原因是解析的html文件中,开始的标签和结束的标签不匹配

根据报错提示,找到对应的位置添加结束标签即可
单标签在括号里添加 /
双标签写上对应的结束标签

lxml

下载

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml

解析本地

from lxml import etree
tree = etree.parse('index.html')

解析服务器响应文件

from lxml import etree
tree = etree.HTML()

基本语法

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Title</title>
</head>
<body>
    <ul>
        <li class="zs">zs</li>
        <li >ls</li>
        <li class="xr">xr</li>
        <li id="xr" class="xr">xr2</li>
    </ul>
    <img src="icon.png" alt="" />
</body>
</html>

基本语法示例

from lxml import etree
tree = etree.parse('index.html')

# 查找 ul 下的所有 li
print(tree.xpath("//ul/li")) # [<Element li at 0x20b094f3dc0>, <Element li at 0x20b094f3e80>, <Element li at 0x20b094f3f00>]

# 获取 ul 下 li class="xr" 值
print(tree.xpath("//ul/li[@class='xr']/text()")) # ['xr', 'xr2']

# 查找 ul 下第一个 li
print(tree.xpath("//ul/li[1]/text()")) # ['zs']

# 获取 img 标签 src 属性值
print(tree.xpath("//img/@src")) # ['icon.png']

# 查找 ul 下 li id="xr" 并且 class="xr"
print(tree.xpath("//ul/li[@class='xr' and @id='xr']/text()")) # ['xr2']


selenium

下载

pip install selenium

下载谷歌驱动

https://chromedriver.storage.googleapis.com/index.html

基本使用

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from time import sleep

url = 'https://www.lagou.com'

# path = Service('./chromedriver.exe')

# 取消自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
# 创建浏览器对象
driver = webdriver.Chrome(options=option)
# driver = webdriver.Chrome()

# 最大化窗口
# driver.maximize_window()
# 最小化窗口
# driver.minimize_window()

# 打开地址
driver.get(url)

# 获取网站的 title 标签内容
# print(driver.title)

# 通过 xpath 查找元素
btn = driver.find_element(by=By.XPATH, value='//*[@id="cboxClose"]')

# <button type="button" id="cboxClose">close</button>
# 获取值 和 type 属性 ---- close button
print(btn.text, btn.get_attribute('type'))

# 点击按钮
btn.click()

sleep(2)

# 根据 id 获取
search_btn = driver.find_element(by=By.ID,value='search_input')

# 向 input 输入内容
search_btn.send_keys('python')

sleep(1)
# 清空输入框
search_btn.clear()

# 执行 js 代码,删除某元素
driver.execute_script("""
    const ad = document.querySelector('.un-login-banner')
    ad.parentNode.removeChild(ad)
""")

# 切换窗口 从 0 开始 -1 为最后一个
# driver.switch_to.window(driver.window_handles[-1])
# driver.switch_to.window(driver.window_handles[0])

# 关闭窗口
# driver.close()

# 关闭浏览器
# driver.quit()


无头浏览器

# 无头浏览器 即不打开浏览器
option.add_argument("--headless")
option.add_argument("--disable-gpu")
# 创建浏览器对象
driver = webdriver.Chrome(options=option)

iframe文章来源地址https://www.toymoban.com/news/detail-820232.html


# iframe 切换到 iframe
# iframe = driver.find_element(by=By.ID, value='search_button')
# driver.switch_to.frame(iframe)
# 跳出 iframe
# driver.switch_to.parent_frame()
# 获取页面代码 是 f12 里的代码 不是源代码
# driver.page_source

到了这里,关于Python 爬虫之 requests模块(ua伪装、代理、cookies、防盗链 Referer)、re模块、xpath模块、selenium的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬虫——request模块讲解,Python详解

    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST, 浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 (二)http常见请求参数 url:请求url地址 headers:请求头 **data:发送编码为表

    2024年04月26日
    浏览(35)
  • 『python爬虫』05. requests模块入门(保姆级图文)

    欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 由此可知,我们的请求方式是post,请求url是post的地址 https://fanyi.baidu.com/sug 观察一下我们的formdata,在我们逐渐输入apple的过程中,分别post请求,带有kw参数为“a” “ap” “app” “appl”

    2024年02月02日
    浏览(44)
  • Python爬虫基础:使用requests模块获取网页内容

    了解如何使用Python中的requests模块进行网页内容获取,包括获取网页步骤、代码实现、状态码查看、提取信息等。

    2024年02月22日
    浏览(88)
  • 爬虫学习 Scrapy中间件&代理&UA随机&selenium使用

    控制台操作 (百度只起个名 scrapy startproject mid scrapy genspider baidu baidu.com setting.py内 运行 scrapy crawl baidu middlewares.py 中间件 先看下载器中间件 重点在 process_request 在引擎将请求的信息交给下载器之前,自动的调用该方法 process_response… process_exception 异常 (看名就知道了…) spider

    2024年03月23日
    浏览(62)
  • python3 爬虫相关学习1:安装requests模块

    目录 1 安装前:避免python2  python3 引起的问题 2 如何安装python3 2.1 直接上python3 官网下载 2.2 或者windows的话,microsoft store 里也可以下载 2.3 查看python版本 3 安装requests模块 3.1 很可能安装requests模块之前会遇到报错,需要先升级pip 3.2 安装 requests模块 4 开始使用 requests 模块 4.

    2024年02月05日
    浏览(70)
  • Python 爬虫(一):爬虫伪装

    对于一些有一定规模或盈利性质比较强的网站,几乎都会做一些防爬措施,防爬措施一般来说有两种:一种是做身份验证,直接把虫子挡在了门口,另一种是在网站设置各种反爬机制,让虫子知难而返。 我们知道即使是一些规模很小的网站通常也会对来访者的身份做一下检查

    2024年02月05日
    浏览(49)
  • Python爬虫的学习day02 requests 模块post 函数, lmxl 模块的 etree 模块

    1.1 post 函数的参数 (简单版) 参数1:  url     网络地址 参数2:   data   请求数据 (一般数据是  账号,密码) 参数3:    headers  头请求  (User-Agent:  第一章讲过) 1.2  post 请求中 url 参数的获取 1.2.1 首先 打开一个 登录界面 。(这里以淘宝的登录界面为样例)

    2024年02月14日
    浏览(35)
  • python requests爬虫返回403错误?加了所有特征的请求头+代理也解决不了的问题处理

    【疑惑】:使用python的requests库发起get或post请求返回403代码错误,使用postman发起请求发现状态码200竟然成功了。这是什么原因?首先排除ip问题,ip有问题的话postman也访问不了。难道是headers出现了问题吗,通过对比发现也不是headers的问题。那就奇了怪了? 【解疑】:其实遇

    2024年02月15日
    浏览(39)
  • Python之爬虫的头部伪装

    一)简介 Python爬虫的头部伪装是为了让爬虫看起来像普通的浏览器访问,以避免被网站的反爬程序识别记录并封禁。这也是为什么很多的网站不停的在完善反爬程序,所以学会头部伪装是一个一本万利的事情。 规避网站反爬程序的手段有许多,但头部伪装是我个人认为最为

    2024年02月09日
    浏览(30)
  • Python 爬虫的学习 day01 ,爬虫的基本知识, requests 和 charde模块, get函数的使用

    1.1什么是网络爬虫 网络爬虫,又称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 1.2  网络爬虫的特点 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包