iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3 selenium + f
  • 217
分享到

python3 selenium + f

selenium 2023-01-31 08:01:16 217人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一、 分析:抓取动态页面js加载的人民日报里面的新闻详情 https://wap.peopleapp.com/news/1先打开,然后查看网页源码,发现是一堆js,并没有具体的每个新闻的url详情,于是第一反应,肯定是js动态加载拼接的u

一、 分析:
抓取动态页面js加载的人民日报里面的新闻详情 https://wap.peopleapp.com/news/1
先打开,然后查看网页源码,发现是一堆js,并没有具体的每个新闻的url详情,于是第一反应,肯定是js动态加载拼接的url。然后接着按f12 查看,就看url,发现出来了好多url。
然后点击具体的某一个新闻详情页面,查看url,把这个url的 后面两个数字其中一个拿到访问主页的时候,f12 抓包结果里面去查找,发现一个url,点击这个url,发现preview里面有好多数据,我第一反应,肯定是每个新闻数据了。看到这些数据里面有两个ID,联想到刚刚访问具体新闻详情页面也有两个数字,肯定,具体新闻页面肯定是 Https://wap.peopleapp.com/article 加上两个ID形成的。于是试了一下拼接一个url访问,果然是。于是乎只要抓到这个url,就能获取到每个新闻的详情页了。
python3 selenium + fiddler 爬取动态js页面数据
python3 selenium + fiddler 爬取动态js页面数据
python3 selenium + fiddler 爬取动态js页面数据
但这个抓到的url只加载了10条,我于是想改改里面的 show_num值,发现请求失败,仔细看这个url,有个securitykey 这个应该是js根据具体算法算出来的,看了一下那个拼接成url的js,发现看着有点头大,算了,只要我能一直抓这类url就行了
https://app.peopleapp.com/Wapapi/610/HomeApi/getContentList?cateGory_id=1&refresh_time=0&show_num=10&page=1&securitykey=ee9bad0d112f882403f5b9f4dc2266a0&interface_code=610

发现只要我页面往下翻,就会新加载一条,于是我只要能解决两个问题:
1.往下翻页的问题,让这个数据url给加载出来
2.把这个url抓取到日志里面利用脚本访问,就能获取到数据了

查看了网上一些文档,最后决定用 pythonselenium 这个模块,它是程序打开本地的浏览器进行操作,它里面有个方法execute_script('window.scrollTo(0, document.body.scrollHeight)') 就是下翻页的,利用这个就能一直把后面的 那个数据url给加载出来了。
第二个就是解决把这个数据url给抓出来,我就用fiddler来进行抓包(这里抓包工具,根据你们自己的选择,推荐一个:mitmproxy,这也是抓包神器,可以定制化抓包,比较方便,具体操作请百度、google)
我这里用fiddler,经常用这个,用着习惯。

二、使用fiddler进行抓包写入日志
1.fiddler 导出证书到浏览器
1.1.打开 tools-options
python3 selenium + fiddler 爬取动态js页面数据

1.2.点击https-> actions -> export root certificate to desktop
python3 selenium + fiddler 爬取动态js页面数据
1.3.打开浏览器(以火狐为例)

python3 selenium + fiddler 爬取动态js页面数据
1.4.直接搜索”证书”,点击查看证书
python3 selenium + fiddler 爬取动态js页面数据

1.5.点击导入—选择刚才从fiddler导出的证书即可
python3 selenium + fiddler 爬取动态js页面数据

1.6.设置fiddler代理
打开 tools-> options -> connections
设置端口,默认8888
python3 selenium + fiddler 爬取动态js页面数据

1.7.设置火狐浏览器去连接fiddler代理
找到网络设置,打开后,点击手动代理配置,填写ip,端口,勾选”为所有协议使用相同的代理服务器
python3 selenium + fiddler 爬取动态js页面数据
python3 selenium + fiddler 爬取动态js页面数据
最后找一个https验证访问即可

fiddler 过滤(对动态抓取,可不设置,扩展学习
参考:
https://www.cnblogs.com/sjl179947253/p/7627250.html

1.8. 打开 FiddlerScript,查找OnBeforeResponse 方法写入脚本
if (oSession.HostnameIs("app.peopleapp.com") && oSession.uriContains("getContentList")){
var filename = "F:/logs/fiddler.log";
var curDate = new Date();
var loGContent = "https://app.peopleapp.com" + oSession.PathAndQuery + "\r\n";
var sw : System.IO.StreamWriter;
if (System.IO.File.Exists(filename)){
sw = System.IO.File.AppendText(filename);
sw.Write(logContent);
}
else{
sw = System.IO.File.CreateText(filename);
sw.Write(logContent);
}
sw.Close();
sw.Dispose();
}

python3 selenium + fiddler 爬取动态js页面数据
python3 selenium + fiddler 爬取动态js页面数据

三、 Python 脚本读取fiddler日志,对最新的url进行获取内容,提取id拼接成新的新闻详情url

  1. 准备工作:
    我这里用的是python3 先pip3 install selenium 安装模块

然后下载浏览器驱动,这下面有两个,google根据对应浏览器版本下载,firefox根据系统类型下载即可
#google 浏览器驱动下载地址 http://npm.taobao.org/mirrors/chromedriver/
#firefox 浏览器驱动下载地址 https://GitHub.com/mozilla/geckodriver/releases/

  1. 最后贴上脚本
  2. from selenium import WEBdriver
    import time
    import requests as r
    import re
    import JSON

#获取具体的新闻url,并写入文本
def get_news_url(search_time):
#打开日志文件
file = open("F:/logs/fiddler.log","r")
#最新一条url
file_msg = file.readlines()
#判断fiddler里面是否有url内容,若读取的内容列表等于0,则表示无内容
if len(file_msg) == 0:
return "continue"
#读取数组内容最后一位,即为最新的url
url = file_msg[-1].strip("\n")
print(url.strip("\n"))
file.close()
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Cookie": "acw_tc=2760826c15644797526864019e11da63f32bf5b082a7da38667809b95819f3; SERVERID=f858eac9d6463aa503ba25948984ceb0|1564566072|1564566072",
"Host": "app.peopleapp.com",
"Pragma": "no-cache",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
#获取抓包的最新url数据
html = r.get(url,headers=headers).text
#转换成json
json_html = json.loads(html)
#获取json的data数据
news_data_li = json_html["data"]
#写入文件
news_file = open("F:/logs/news.log","a")
#循环data数据,提取两个id,拼接成url,写入日志文件(这里可以根据实际情况,如对拼接成的url进行判断 分成具体的每个月进行写入日志等)
for news in news_data_li:
id = news["id"]
articleid = news["articleid"]
news_url = "https://wap.peopleapp.com/article/" + id + "/" + articleid
print(news_url)
news_file.write(news_url + "\n")
news_file.close()
#这一步只是用来控制的获取数据的时间,若传入的时间在数据内,则返回stop,停止,比如 只搜索 201904到现在的,就传入201904即可,这里根据具体需求改改就行
search_result = re.search(search_time,html)
if search_result is None:
return "continue"
else:
return "stop"

#爬取动态页面url
#google 浏览器驱动下载地址 http://npm.taobao.org/mirrors/chromedriver/
#firefox 浏览器驱动下载地址 https://github.com/mozilla/geckodriver/releases/
#browser = webdriver.Chrome(executable_path="D:\python37\chromedriver_win32\chromedriver.exe")
#加载具体的浏览器驱动
browser = webdriver.Firefox(executable_path="D:\python37\geckodriver-v0.24.0-win64\geckodriver.exe")
#设置浏览器需要访问的url
browser.get("https://wap.peopleapp.com/news/1")
#循环操作浏览器往下翻页
while True:
#翻页脚本
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
#翻页后,暂停1秒
time.sleep(1)
#调用获取具体详情新闻页的url
results = get_news_url("201907")
#判断结果是否停止
if results == "stop":
browser.quit()
break

--结束END--

本文标题: python3 selenium + f

本文链接: https://www.lsjlt.com/news/192710.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3 selenium + f
    一、 分析:抓取动态页面js加载的人民日报里面的新闻详情 https://wap.peopleapp.com/news/1先打开,然后查看网页源码,发现是一堆js,并没有具体的每个新闻的url详情,于是第一反应,肯定是js动态加载拼接的u...
    99+
    2023-01-31
    selenium
  • 【Python3】f-string——s
    文章目录1. 基本用法2. f-string的一些细节2.1 引号2.2 大括号2.3 反斜杠2.4 多行f-string3. 格式化3.1 类型3.2 对齐与填充3.3 符号位和前缀:针对数值,用于字符串会报错3.4 最小宽度3...
    99+
    2023-01-31
    string
  • Python3 Selenium+Chr
    以前抓取动态网页是用PhantomJS + Selenium + ChromeDriver,但是新版的Selenium不支持PhantomJS了,程序跑的时候总会跳出一些warnings.现在的操作是放弃PhantomJS,直接用head...
    99+
    2023-01-31
    Selenium Chr
  • 通过Python3+selenium自动
    使用的是selenium,最开始接触这个模块包是爬虫,这次是工作需要来自动测试网页。 记录一下模拟不同浏览器的方式 总共测了两个浏览器,Firefox在centos7上和chrome在win10上。都是模拟的IPAD方式访问,原因是使用...
    99+
    2023-01-31
    selenium
  • python3+selenium框架设计
    使用HTMLTestRunner可以生成测试报告。HTMLTestRunner是unittest模块下的一个拓展,原生的生成报告样式比较丑,GitHub上有大佬优化过后的版本:GitHub地址。下载之后解压应该是这样的 我们需要使用的是...
    99+
    2023-01-31
    框架 selenium
  • python3+selenium访问网页
    selenium的安装 直接通过pip install selenium就可以安装了,非常简单。 使用Firefox时 报错:selenium.common.exceptions.WebDriverException: Message: '...
    99+
    2023-01-31
    网页 selenium
  • python3爬虫-通过selenium
    from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.c...
    99+
    2023-01-31
    爬虫 selenium
  • python3怎么用f-strings格式化字符串
    这篇文章将为大家详细讲解有关python3怎么用f-strings格式化字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用f-strings格式化字符串(Python 3.6+)这是自Python &...
    99+
    2023-06-27
  • Python3爬虫利器:Selenium怎么安装
    小编给大家分享一下Python3爬虫利器:Selenium怎么安装,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均为Py...
    99+
    2023-06-14
  • python yield、yield f
    从生成器到协程 协程是指一个过程,这个过程与调用方协作,产出由调用方提供的值。生成器的调用方可以使用 .send(...)方法发送数据,发送的数据会成为yield表达式的值。因此,生成器可以作为协程使用。 从句法上看,生成器与协程都是包含...
    99+
    2023-01-30
    python yield
  • shell if -z -f
    if判断中常使用的shell选项 选项    含义 -eq    //等于 -ne    //不等于 -gt    //大于 -lt    //小于 -ge    //大于等于 -le    //小于等于 -z    判断变量是否存在值  ...
    99+
    2023-09-11
    java servlet 服务器
  • tailf、tail -f、tail -F三者区别是什么
    这篇文章主要介绍tailf、tail -f、tail -F三者区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!tail -f      等同于--follow=desc...
    99+
    2023-06-19
  • Spread for Windows F
    开发人员可以定义用户与行和列的交互,如是否可以更改行或列的大小、是否可以移动行或列、冻结指定的行或列、在行或列中查找数据等。 更改行或列的大小 你可以允许用户重新调整表单中行或列的大小。 设置行的Resizable属性以允许用户重置行的大小...
    99+
    2023-01-31
    Spread Windows
  • Voice Lab 3-IPhone F
    Voice Lab 3-IPhone Features & CME Features1-试验拓扑:telephony-serviceno auto-reg-ephone //关闭自动注册max-ephones 5max-dn 5ip...
    99+
    2023-01-31
    Voice Lab IPhone
  • Python之%s%d%f
    %s 字符串string="hello" #%s打印时结果是hello print ("string=%s" % string) # output: string=hello #%2s...
    99+
    2023-01-31
    Python
  • python调用powershell,f
    1、Get_RemoteAPP.ps1 set-executionpolicy remotesigned Import-Module RemoteDesktopServices function GetAPP(){     $result...
    99+
    2023-01-31
    python powershell
  • Selenium + chromeDr
    在使用 selenium + chromeDriver + python3 截图时,遇上 Flash 无法加载,导致了截图 Falsh 是空白区。 环境要求:selenium chromeDriver Python3 问题 chrome ...
    99+
    2023-01-31
    Selenium chromeDr
  • python + selenium +
    使用python3.6在Ubuntu中进行了一项使用Chrome headless浏览器的工作, 在此记录下遇到的问题以及解决方法. 入门 参考 unning-selenium-with-headless-chrome Ubuntu中如何...
    99+
    2023-01-31
    python selenium
  • python之print(f“ “)用法
    python之print(f" ")用法 Python输出函数print加上 f 的作用:即print(f" “) 主要作用就是格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,使...
    99+
    2023-10-20
    python 开发语言
  • F#语言实例分析
    这篇文章主要讲解了“F#语言实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“F#语言实例分析”吧!在F#编写一个两个数相加的函数,在F# Interactive中输入:1let&nbs...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作