文章目录

  • 前言
  • 一、确定爬取的对象
  • 二、开始分析

前言

利用python 模拟浏览器获取百度的天气接口


提示:以下是本篇文章正文内容,下面案例可供参考

一、确定爬取的对象


http://weathernew.pae.baidu.com/weathernew/pc?query=%E6%9D%AD%E5%B7%9E%E5%A4%A9%E6%B0%94&srcid=4982&city_name=%E6%9D%AD%E5%B7%9E&province_name=%E6%B5%99%E6%B1%9F

二、开始分析

第一步当然是通过浏览器打开http://weathernew.pae.baidu.com/weathernew/pc?query=%E6%9D%AD%E5%B7%9E%E5%A4%A9%E6%B0%94&srcid=4982&city_name=%E6%9D%AD%E5%B7%9E&province_name=%E6%B5%99%E6%B1%9F这个网站,然后按下F12,点击network,查看前端向后台发送的是什么请求

页面第一个发送的请求,就是发送查询天气的接口,

仔细看了哈request的请求头并没有token,sign之类的参数,似乎好像难度不大,在看看响应头信息

响应头信息,返回了一个html页面代码,怎么获取天气信息呢?等等,页面中的脚本中有一个
window.tplData 语句,是不是,这个信息存放在window对象内,在控制台中输出一下,试一下:


果然是这个样子,向这个地址发送请求,它的响应信息在页面的window对象里面,把值取出来就搞定了。但是,怎么从页面中从window 对象中取值呢?
百度了一下一下,python提供了两个比较常用的库execjs、js2py 两个库可以执行javascript 语句,我这里就用execjs这个库

安装execjs

pip install execjs

等了一会安装好了,开始写python代码

from urllib.parse import urlencode
import requests
url = 'http://weathernew.pae.baidu.com/weathernew/pc'
city = '杭州'
province = '浙江省'
query = '{%s}天气'%{city}
srcid = 4982
params = {'query':query,'srcid':srcid,'city_name':city,'province_name':province
}
print(params)
headers = {'cookie': 'BAIDUID=0DE9E99FCAA93BB44E1F5A3FB9551C5E:FG=1; PSTM=1617506980; BIDUPSID=5AABE7C0A1B4B37C7CDCA3EBE496C373; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; H_PS_PSSID=; delPer=0; PSINO=1; BA_HECTOR=2104858521250181pq1g6ksm20r; Hm_lvt_3535ee208b02ecdf4b2576fd444e8473=1617588962; Hm_lpvt_3535ee208b02ecdf4b2576fd444e8473=1617588973','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36','Referer': 'http://weathernew.pae.baidu.com/',
}
response = requests.get(url,headers=headers,params=params)
print(response)

到这里,获取了页面的源代码了,但是怎么获取页面的window对象呢?对,借鉴哈前人的经验
https://www.cnblogs.com/shizhengwen/p/14092614.html
还真有门路,使用node 里面的jsdom ,似乎我本地也有node 环境
全局安装

npm install jsdom -g

执行下面的这段代码

tag = """const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest; """
js = execjs.compile(tag)

报错了,说找不到jsdom这个模块,咱查看一下刚才把jsom 全局安装到哪里去了

npm root -g



有解决办法,把刚才的代码改良一下

tag = """const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest; """
js = execjs.compile(tag,cwd=r'D:\node-v14.15.1-win-x64\node_modules')

这似乎还是不太顺利,不过没事继续找解决方案


原来如此,我来试试:

修改后

运行试试

Greate 数据获取成功
全部源代码:

from urllib.parse import urlencodeimport execjs
import requests
from bs4 import BeautifulSoup
url = 'http://weathernew.pae.baidu.com/weathernew/pc'
city = '杭州'
province = '浙江省'
query = '{%s}天气'%{city}
srcid = 4982
params = {'query':query,'srcid':srcid,'city_name':city,'province_name':province
}
headers = {'cookie': 'BAIDUID=0DE9E99FCAA93BB44E1F5A3FB9551C5E:FG=1; PSTM=1617506980; BIDUPSID=5AABE7C0A1B4B37C7CDCA3EBE496C373; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; H_PS_PSSID=; delPer=0; PSINO=1; BA_HECTOR=2104858521250181pq1g6ksm20r; Hm_lvt_3535ee208b02ecdf4b2576fd444e8473=1617588962; Hm_lpvt_3535ee208b02ecdf4b2576fd444e8473=1617588973','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36','Referer': 'http://weathernew.pae.baidu.com/',
}
response = requests.get(url,headers=headers,params=params)
soup = BeautifulSoup(response.text, features="lxml")
tag = soup.find_all("script")[0].decode_contents()
tag = """const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window = dom.window;
document = window.document;
XMLHttpRequest = window.XMLHttpRequest; """ + tag
js = execjs.compile(tag, cwd=r'D:\node-v14.15.1-win-x64\node_modules')tplData = js.eval("window.tplData")
print(tplData)

python爬取百度天气接口【实战记录】相关推荐

  1. python爬百度翻译-爬虫 python爬取百度翻译接口 超详细附源码

    前言 今天教大家如何利用 firefox 分析百度翻译的接口,并用python爬取接口.大家学会后可以干一些有趣的事情,比如做一个自己的翻译软件. 具体内容 1 - 找到URL接口 进入百度翻译的网址 ...

  2. python爬取帖吧图片实验报告,Python爬取百度贴吧图片

    原标题:Python爬取百度贴吧图片 作者:MTbaby 来源:http://blog.csdn.net/mtbaby/article/details/70209729 描述:用Python爬去百度贴 ...

  3. python爬百度翻译-Python爬取百度翻译(利用json提取数据)

    本篇文章给大家带来的内容是关于Python爬取百度翻译(利用json提取数据),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 工具:Python 3.6.5.PyCharm开发工具. ...

  4. python爬取苏州天气并用excel来保存

    用python爬取苏州天气 python爬取苏州天气 一.爬虫是什么? 爬虫我理解就是有针对性的爬取网络上的资源!比如说浏览器本身就是一种爬虫工具,当你访问某种网页时,你的浏览器就像一个蜘蛛,爬取网页 ...

  5. python爬取百度使用kw关键字爬取时出现,百度安全验证,解决方法

    python爬取百度使用kw关键字爬取时出现,百度安全验证,解决方法 之前爬取百度用kw时的代码(没有任何问题) import requestsurl = 'http://www.baidu.com/ ...

  6. python爬取百度贴吧图片库_python爬取百度贴吧的图片2

    今天看了一下beautifulsoup库的用法,把昨天的python爬取百度贴吧的图片1的代码更新成使用beautifulsoup库的函数来实现.用的还是不太熟练,但是感觉比正则表达式写起来容易了一些 ...

  7. python爬取百度搜索_使用Python + requests爬取百度搜索页面

    想学一下怎样用python爬取百度搜索页面,因为是第一次接触爬虫,遇到一些问题,把解决过程与大家分享一下 1.使用requests爬取网页 首先爬取百度主页www.baidu.com import r ...

  8. Python爬取百度翻译及有道翻译

    Python爬取百度翻译及网易有道翻译 百度翻译 一.简介 明确翻译链接,百度翻译链接:https://fanyi.baidu.com/,但是该链接不能为我们提供翻译的内容,此时需要在chrome浏览 ...

  9. 【Python】python爬取百度云网盘资源-源码

    今天测试用了一下python爬取百度云网盘资源. 标签: <无> 代码片段 [代码][Python]代码 import urllib import urllib.request impor ...

最新文章

  1. 渐进式Web应用(PWA)入门教程(上)
  2. Flutter 初学者的简单例子充分解释
  3. python分位数回归模型_如何理解分位数回归风险价值 (VaR) 模型?
  4. 多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态
  5. MySQL的前缀索引及Oracle的类似实现
  6. 银医 服务器虚拟化,长宁时报数字报刊平台-技术创新 需求驱动 信息化助力医院发展...
  7. Redis缓存持久化
  8. quick time不可用是什么意思_农村谚语“不可不算,不可全算”是什么意思?
  9. 计算机文言,中国最具有概括性的文言文文字?本人学计算机编程的
  10. php手机下载功能,phpwind手机客户端1.2版主要功能亮点详解
  11. 计算机学报latex模板\renewcommand\figurename失效
  12. 如何在Chrome39添加360抢票王插件
  13. bzoj1864 [Zjoi2006]三色二叉树
  14. 海瑞菌的web前端学习直播间
  15. ppt打不开服务器文件,ppt都打不开,没法活了!文件打不开的原因以及解决方法...
  16. Python爬虫下载视频(梨视频)
  17. html+复制插件,jenkins 插件Copy Artifacts + Artifacts to copy
  18. [转]String 之 new String()和 intern()方法深入分析
  19. sklearn中transform和fit_transform的区别(解决中文向量化特征不一致问题)
  20. 【5. ROS机器人的运动控制】

热门文章

  1. 医疗行业:容灾备份平台建设及运维难点
  2. IDEA控制台为什么不打印日志
  3. Python绝技第一章 入门 python3实现密码破解
  4. docker pull报错:Timeout exceeded while awaiting headers解决思路
  5. python移动窗口函数_设置窗口图标和移动窗口
  6. 力扣(88.53)补8.31
  7. C++ 加号运算符重载
  8. vue-生成二维码+下载二维码
  9. OpenCV视频篇——颜色跟踪
  10. php开源记账,php记账