利用requests模块进行数据爬取初级操作

#需求:爬取搜狗首页的页面源码数据
import requests
#1.指定url
url = 'https://www.sogou.com/'
#2.发起请求
response = requests.get(url=url)#get返回一个响应对象
#3.获取响应数据
page_text = response.text #获取字符串形式的响应数据
print(page_text)
#4.持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:
    fp.write(page_text)
<!DOCTYPE html><html lang="cn"><head><script>window._speedMark = new Date();  window.lead_ip = '106.115.33.66';
    window.now = 1592272919293;</script><script type="text/javascript">/*file=static/js/resourceErrorReport.js*/!function(a){var n=(new Date).getTime(),r=a.location.protocol;function c(e,t){var o=(new Date).getTime()-n;(new Image).src=["//pb.sogou.com/pv.gif?uigs_productid=wapapp&type=resource-error&stype=",e,"&timestamp=",o,"&protocol=",r,"&host=",encodeURIComponent(a.location.host),"&path=",encodeURIComponent(a.location.pathname),"&resource=",encodeURIComponent(t)].join("")}function e(e){if((e=e||a.event)&&"error"===e.type){var t=e.srcElement?e.srcElement:e.target;if(t){var o,n,r=t.tagName;"LINK"===r?(n="css",(o=t.getAttribute("href"))&&o.match(/.css($|?)/)&&c(n,o)):"SCRIPT"===r&&(n="js",(o=t.getAttribute("src"))&&o.match(/.js($|?)/)&&c(n,o))}}}r&&(r=r.substring(0,r.length-1)),a.addEventListener?a.addEventListener("error",e,!0):a.attachEvent&&a.attachEvent("onerror",e)}(window);</script><meta charset="utf-8"><link rel="dns-prefetch" href="//img01.sogoucdn.com"><link rel="dns-prefetch" href="//img02.sogoucdn.com"><link rel="dns-prefetch" href="//img03.sogoucdn.com"><link rel="dns-prefetch" href="//img04.sogoucdn.com"><link rel="dns-prefetch" href="//dlweb.sogoucdn.com"><title>搜狗搜索引擎 - 上网从搜狗开始</title><link rel="shortcut icon" href="/images/logo/new/favicon.ico?v=4" type="image/x-icon"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" title="搜狗搜索"><meta name="keywords" content="搜狗搜索,网页搜索,微信搜索,视频搜索,图片搜索,音乐搜索,新闻搜索,软件搜索,问答搜索,百科搜索,购物搜索"><meta name="description" content="搜狗搜索是全球第三代互动式搜索引擎,支持微信公众号和文章搜索、知乎搜索、英文搜索及翻译等,通过自主研发的人工智能算法为用户提供专业、精准、便捷的搜索服务。"><link rel="stylesheet" type="text/css" href="//dlweb.sogoucdn.com/pcsearch/web/index/css/index_style_9454fa6.css"><style>.wrapper .suggestion{border:1px solid #e8e8e8;653px;-moz-box-shadow:0 1px 8px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1);border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px;top:43px}.wrapper .suglist{206px}.wrapper .suglist .keyword{color:#7a77c8}.big-scn .suggestion{820px}.big-scn .suglist{236px}.wrapper .suglist{padding:4px 0}input[type=text]::-ms-clear{display:none}</style></head><body color-style="white"><div class="wrapper " id="wrap"><div class="header"> <div class="top-nav"><ul><li><a onclick="st(this,'40030300','news')" href="http://news.sogou.com" uigs-id="nav_news" id="news">新闻</a></li><li class="cur"><span>网页</span></li><li><a onclick="st(this,'73141200','weixin')" href="http://weixin.sogou.com/" uigs-id="nav_weixin" id="weixinch">微信</a></li><li><a onclick="st(this,'40051200','zhihu')" href="http://zhihu.sogou.com/" uigs-id="nav_zhihu" id="zhihu">知乎</a></li><li><a onclick="st(this,'40030500','pic')" href="http://pic.sogou.com" uigs-id="nav_pic" id="pic">图片</a></li><li><a onclick="st(this,'40030600','video')" href="https://v.sogou.com/" uigs-id="nav_v" id="video">视频</a></li><li><a href="http://mingyi.sogou.com?fr=common_index_nav" uigs-id="nav_mingyi" id="mingyi" onclick="st(this,'','myingyi')">明医</a></li><li><a href="http://english.sogou.com?fr=pcweb_index_nav" uigs-id="nav_overseas" id="overseas" onclick="st(this,'','overseas')">英文</a></li><li><a onclick="st(this,'web2ww','wenwen')" href="https://wenwen.sogou.com/?ch=websearch" uigs-id="nav_wenwen" id="index_more_wenwen">问问</a></li><li><a href="http://scholar.sogou.com?fr=common_index_nav" uigs-id="nav_scholar" id="scholar" onclick="st(this,'','scholar')">学术</a></li><li class="show-more"><a href="javascript:void(0);" id="more-product">更多<i class="m-arr"></i></a><div class="pos-more" id="products-box" style="top:40px"><span class="ico-san"></span><a onclick="st(this,'40031000')" href="http://map.sogou.com" uigs-id="nav_map" id="map">地图</a><a onclick="st(this,'40031500')" href="http://gouwu.sogou.com/" uigs-id="nav_gouwu" id="index_more_gouwu">购物</a><a onclick="st(this,'40051203')" href="http://baike.sogou.com/Home.v" uigs-id="nav_baike" id="index_more_baike">百科</a><a onclick="st(this)" href="http://zhishi.sogou.com" uigs-id="nav_zhishi" id="index_more_zhishi">知识</a><a onclick="st(this,'40051205')" href="http://as.sogou.com/" uigs-id="nav_app" id="index_more_appli">应用</a><a onclick="st(this,'40051205','fanyi')" href="http://fanyi.sogou.com?fr=common_index_nav_pc" uigs-id="nav_fanyi" id="index_more_fanyi">翻译</a><a href="http://index.sogou.com" uigs-id="nav_index" id="index_more_index">指数</a>  <a href="http://dangjian.sogou.com" uigs-id="nav_dangjian" id="dangjian" onclick="st(this,'','dangjian')">党建</a>  <span class="all"><a onclick="st(this,'40051206')" href="http://www.sogou.com/docs/more.htm?v=1" uigs-id="nav_all" target="_blank">全部</a></span></div></li></ul></div><div class="user-box"><div class="local-weather" id="local-weather"><div class="wea-box" id="cur-weather" style="display:none"></div>  <div class="pos-more" id="detail-weather" style="top:40px;left:-80px"></div>  </div><span class="line" id="user-box-line" style="display:none"></span><div class="user-enter"><a href="javascript:void(0);" id="show-card"  style="display:none"  uigs-id="settings_show-card">显示卡片</a>  <a href="javascript:void(0);" class="enter" id="loginBtn">登录</a>  </div></div></div><div class="content" id="content"><div class="pos-header" id="top-float-bar"><div class="part-one"></div><div class="part-two" id="card-tab-layer"><div class="c-top" id="top-card-tab"></div></div></div><div class="logo2" id="logo-s"><span></span></div><div class="logo" id="logo-l"><span></span></div> <div class="search-box querybox-focus" id="search-box"><form action="/web" name="sf" id="sf"><span class="sec-input-box"><input type="text" class="sec-input active" name="query" id="query" maxlength="100" len="80" autocomplete="off"></span><span class="enter-input"><input type="submit" value="搜狗搜索" id="stb"></span><input type="hidden" name="_asf" value="www.sogou.com"> <input type="hidden" name="_ast"> <input type="hidden" name="w" value="01019900"> <input type="hidden" name="p" value="40040100"> <input type="hidden" name="ie" value="utf8">  <input type="hidden" name="from" value="index-nologin">  <input type="hidden" name="s_from" value="index"><div class="keywords-tips" id="keywordsTips" style="display:none"><i></i><p>“<strong id="keywordsTipsStrong">369</strong>”后面的文字被忽略,搜狗的查询限制在40个汉字以内。</p></div></form></div>  </div><div class="card-box" id="card-box" style="display:none"><div class="card-box2" id="card-box2"><div class="c-top" id="card-tab-box"><a href="javascript:void(0);" uigs-id="settings_close-card" id="close-card" class="shezhi"></a></div><div class="c-main" id="card-content"></div></div></div><div class="loog-more" id="scroll-more" style="display:none"><a href="javascript:void(0);" uigs-id="scroll-more">滚动查看更多<br><span class="ico_san"></span></a></div><div class="ft" id="footer"  style="display:none" ><a href="http://b.sogou.com/" target="_blank" uigs-id="footer_tuiguang">企业推广</a><span class="line"></span><a href="http://corp.sogou.com/" target="_blank" uigs-id="footer_about">关于搜狗</a><span class="line"></span><a href="http://ir.sogou.com/" target="_blank" uigs-id="footer_aboutEnglish">About Sogou</a><span class="line"></span><a href="http://www.sogou.com/docs/terms.htm?v=1" target="_blank" uigs-id="footer_disclaimer">免责声明</a><span class="line"></span><a href="http://fankui.help.sogou.com/index.php/web/web/index/type/4" target="_blank" uigs-id="footer_feedback">意见反馈及投诉</a><span class="line"></span><a href="http://corp.sogou.com/private.html" target="_blank" uigs-id="footer_private">隐私政策</a><br>&copy;&nbsp;2004-2020&nbsp;Sogou.com&nbsp;/&nbsp;<span class="g">京网文 (2016) 6432-852号</span>&nbsp;/&nbsp;<span class="g">京ICP证050897号</span><br><span class="g">(京)-经营性-2016-0019</span>&nbsp;/&nbsp;<a href="http://www.12377.cn" class="g" target="_blank">网上有害信息举报专区</a>&nbsp;/&nbsp;<span class="g">京ICP备11001839号-1</span>&nbsp;/&nbsp;<a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11000002000025" class="ba" target="_blank">京公网安备11000002000025号</a></div>  <div class="ft-v1" id="QRcode-footer" style="padding-bottom:28px"><div class="erwm-box"><span class="ewm"><img src="/web/index/images/erweima2.png" alt=""></span><div class="erwx"><p>下载搜狗搜索APP</p></div></div><div class="ft-info"><a uigs-id="mid_pinyin" href="http://pinyin.sogou.com/" target="_blank"><i class="i1"></i>搜狗输入法</a><span class="line"></span><a uigs-id="mid_liulanqi" href="http://ie.sogou.com/" target="_blank"><i class="i2"></i>浏览器</a><span class="line"></span><a uigs-id="mid_daohang" href="http://123.sogou.com/" target="_blank"><i class="i3"></i>网址导航</a><br><a href="http://corp.sogou.com/" target="_blank" class="g">关于搜狗</a>&nbsp;-&nbsp;<a href="http://ir.sogou.com/" target="_blank" class="g">About Sogou</a>&nbsp;-&nbsp;<a href="http://b.sogou.com/" target="_blank" class="g">企业推广</a>&nbsp;-&nbsp;<a href="http://www.sogou.com/docs/terms.htm?v=1" target="_blank" class="g">免责声明</a>&nbsp;-&nbsp;<a href="http://fankui.help.sogou.com/index.php/web/web/index/type/4" target="_blank" class="g">意见反馈及投诉</a>&nbsp;-&nbsp;<a href="http://corp.sogou.com/private.html" target="_blank" class="g" uigs-id="footer_private">隐私政策</a><br>&copy;&nbsp;2004-2020&nbsp;Sogou.com&nbsp;/&nbsp;<span class="g">京网文 (2016) 6432-852号</span>&nbsp;/&nbsp;<span class="g">(京)-经营性-2016-0019</span><br><a href="http://www.12377.cn" class="g" target="_blank">网上有害信息举报专区</a>&nbsp;/&nbsp;<span class="g">京ICP证050897号</span>&nbsp;/&nbsp;<span class="g">京ICP备11001839号-1</span>&nbsp;/&nbsp;<a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11000002000025" class="ba" target="_blank">京公网安备11000002000025号</a></div></div> <div class="kuozhan" id="QRcode-box" style="display:none"><a href="javascript:void(0);" id="miniQRcode"></a><span id="QRcode"></span></div><a href="javascript:void(0);" class="back-top" id="back-top"></a></div> <script>var SugPara, uigs_para, msBrowserName = navigator.userAgent.toLowerCase(),msIsSe = false,msIsMSearch = false, hasDoodle = false, queryinput = document.getElementById('query');</script><script>/*file=static/js/indexjs.js*/function indexjsInit(e,o,n,a,t,i,s,u){var r={puid:t,cards:i,cards_sw:s,uigs_cookie:"SUID,sct,SUV"};function c(){try{window.external.metasearch("make_connection","www.google.com.hk")}catch(e){}}uigs_para={uigs_productid:"webapp",type:"webindex_new",stype:e?"login":"nologin",scrnwi:screen.width,scrnhi:screen.height,uigs_pbtag:"A",uigs_cookie:"SUID,sct",protocol:"https:"==location.protocol.toLowerCase()?"https":"http"},e&&(uigs_para=Object.assign(uigs_para,r),window.loginCardConfig={show:"1"===s,cardTab:[{text:"推荐",id:"card-news-tab",initFn:"newsInit",className:"cur"},{text:"导航",id:"card-nav-tab",initFn:"navInit"}]}),SugPara={queryboxid:"search-box",enableSug:!0,sugType:"web",domain:"w.sugg.sogou.com",productId:"web",sugFormName:"sf",inputid:"query",submitId:"stb",suggestRid:"01015002",normalRid:"01019900",useParent:1,sugglocation:"index",showVr:!0,showHotwords:!0,suggAbtestObject:o},/se 2.x/i.test(msBrowserName)&&(msIsSe=!0),/metasr/i.test(msBrowserName)&&(msIsMSearch=!0),queryinput&&msIsSe&&msIsMSearch&&(queryinput.addEventListener?(queryinput.addEventListener("keypress",c,!1),queryinput.addEventListener("keydown",c,!1)):queryinput.attachEvent?(queryinput.attachEvent("onkeypress",c),queryinput.attachEvent("onkeydown",c)):(queryinput.onkeypress=c,queryinput.onkeydown=c)),window.m_s_index=function(){var e=document.sf.query,o=Math.round(1e3*((new Date).getTime()+Math.random()));e.focus(),new RegExp("kw=([^&]+)").test(location.search)&&0==e.value.length&&(e.value=decodeURIComponent(RegExp.$1)),document.cookie.indexOf("SUV=")<0&&(document.cookie="SUV="+o+";path=/;expires=Sun, 29 July 2026 00:00:00 UTC;domain="+function(){var e=document.domain;return e.indexOf("sogou.com")==e.length-9?".sogou.com":e.indexOf("soso.com")==e.length-8?".soso.com":-1!=e.indexOf("sogo.com")?".sogo.com":void 0}()),n&&((new Image).src="//pb6.sogou.com/v6")},window.st=function(e,o,n,t){var i=document.sf.query,s=encodeURIComponent(i.value),u={news:"http://news.sogou.com/news?ie=utf8&query=",web:"web?ie=utf8&query=",weixin:"http://weixin.sogou.com/weixin?type=2&ie=utf8&query=",zhihu:"http://zhihu.sogou.com/zhihu?ie=utf8&query=",pic:"http://pic.sogou.com/pics?ie=utf8&query=",video:"https://v.sogou.com/v?ie=utf8&query=",myingyi:"https://www.sogou.com/web?m2web=mingyi.sogou.com&ie=utf8&query=",overseas:"http://english.sogou.com?b_o_e=1&ie=utf8&fr=pcweb_index_nav&query=",scholar:"http://scholar.sogou.com?ie=utf8&fr=common_index_nav&query=",fanyi:"http://fanyi.sogou.com/?fr=common_index_nav_pc&ie=utf8&keyword=",wenwen:"http://wenwen.sogou.com/s/?ch=websearch&w=",dangjian:a},r=u[n]||e.href;function c(e){return-1<e.indexOf("?")?"&":"?"}i&&""!==i.value&&(u[n]?r=u[n]+s:0<r.indexOf("kw=")?r=r.replace(new RegExp("kw=[^&$]*"),"kw="+s):r+=c(r)+"kw="+s),o&&(r+=c(r)+"p="+o),t&&0<t.length&&(r+="#"+t),!i||""!=i.value||"wenwen"!=n&&"dangjian"!=n||(r=e.href),e.href=r},window.cid=function(e,o){var n=document.sf.query,t=encodeURIComponent(n.value);t?"web2ww"===o?e.href+="s/?cid=web2ww&w="+t:"web2bk"===o&&(e.href+="Search.e?sp=S"+t+"&cid=web2bk"):e.href+="?cid="+o},window.m_s_index()}indexjsInit(false, {"suggestHistoryStrategy1":"","suggestHistoryStrategy2":"0|1|2|3|4|5|6|7|8","suggHistoryAbtest":""}, true, 'http://dangjian.sogou.com/dangjian?query=', 'invaliduser', '', '');</script><script src="//dlweb.sogoucdn.com/pcsearch/web/index/js/suggbase_b9937f7.js"></script>  <script src="//dlweb.sogoucdn.com/pcsearch/js/common/widget/index_login_a7ce741.js"></script><script src="//account.sogou.com/static/api/passport-async.js"></script>  <script src="//dlweb.sogoucdn.com/pcsearch/web/index/js/searchbase_211ecd8.js"></script>  </body></html><!--zly-->

requests基本操作

  • requests作用:

    • 就是一个基于网络请求的模块,可以用来模拟浏览器发请求。
  • 环境安装:

    • pip install requests
  • requests模块的使用流程:

    • 指定一个字符串形式的url
    • 发起请求
    • 获取响应数据
    • 持久化存储
  • 实现一个简易的网页采集器

    • 爬取到任意关键字对应的页面源码数据
url = 'https://www.sogou.com/web?query=jay'
response = requests.get(url=url)
page_text = response.text
with open('./jay.html','w',encoding='utf-8') as fp:
    fp.write(page_text)
  • 上述代码出现了问题:
    • 出现了乱码问题
    • 数据量级不对
#解决乱码问题
url = 'https://www.sogou.com/web?query=jay'
response = requests.get(url=url)
# response.encoding#返回响应数据原始的编码格式
response.encoding = 'utf-8'
page_text = response.text
with open('./jay.html','w',encoding='utf-8') as fp:
    fp.write(page_text)
  • 当次的请求被搜狗认定为是一个异常的请求
    • 什么是异常的请求?
      • 服务器端检测到该次请求不是基于浏览器访问。使用爬虫程序发起的请求就是异常的请求。
    • User-Agent:
      • 本身是请求头中的一个信息。
      • 概念:请求载体的身份标识
        • 请求载体:浏览器,爬虫程序
  • 反爬机制:UA检测
    • 对方服务器端会检测请求载体的身份标识,如果不是基于某一款浏览器的身份标识则认定为是一个异常请求,则不会响应会正常的数据。
  • 反反爬策略:UA伪装
    • 将爬虫程序发起的异常的请求载体标识伪装或者修改成某一款浏览器的身份标识即可
url = 'https://www.sogou.com/web?query=jay'
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
#UA伪装
response = requests.get(url=url,headers=headers)

# response.encoding#返回响应数据原始的编码格式
response.encoding = 'utf-8'
page_text = response.text
with open('./jay.html','w',encoding='utf-8') as fp:
    fp.write(page_text)
  • 参数动态化
    • 可以动态的给请求指定请求参数
key = input('enter a key word:')
#将请求参数封装成键值对
params = {
    'query':key
}
url = 'https://www.sogou.com/web'
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
#参数动态化
response = requests.get(url=url,headers=headers,params=params)

# response.encoding#返回响应数据原始的编码格式
response.encoding = 'utf-8'
page_text = response.text
fileName = key+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'爬取成功!!!')
enter a key word:人民币
人民币.html 爬取成功!!!
  • 爬取动态加载的数据

    • 所谓动态加载的数据是指不是通过浏览器地址栏的url请求到的数据。
    • 如何检测我们爬取的数据是否为动态加载的数据?
      • 基于抓包工具做局部搜索(在抓包工具中找到地址栏url对应的数据包,在其response这个选项卡下进行搜索爬取数据的关键字)
    • 如何爬取动态加载的数据?
      • 基于抓包工具做全局搜索,可以帮我们定位到动态加载的数据到底是存在于哪一个数据包中,定位到之后,就可以对该数据包的url进行请求发送捕获数据。
  • 爬取豆瓣中更多电影详情数据

    • 当滚轮向下滑动的时候,会加载出更多的电影数据,说明当滚轮滑动到底部时,会发起一个ajax请求,该次请求会加载出更多的数据。
url = 'https://movie.douban.com/j/chart/top_list'
params = {
    'type': '5',
    'interval_id': '100:90',
    'action': '',
    'start': '0',
    'limit': '100',
}
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
#json()返回字典或者列表对象
data_list = requests.get(url=url,headers=headers,params=params).json()
for dic in data_list:
    title = dic['title']
    score = dic['score']
    print(title,score)
福尔摩斯二世 9.5
这个杀手不太冷 9.4
蝙蝠侠:黑暗骑士 9.2
指环王3:王者无敌 9.2
七武士 9.2
指环王2:双塔奇兵 9.1
将军号 9.1
搏击俱乐部 9.0
黑客帝国 9.0
指环王1:魔戒再现 9.0
攻壳机动队 9.0
赛文奥特曼 我是地球人 9.0
V字仇杀队 8.9
勇敢的心 8.9
乱 8.9
用心棒 8.9
让子弹飞 8.8
蝙蝠侠:黑暗骑士崛起 8.8
杀人回忆 8.8
谍影重重3 8.8
纵横四海 8.8
黑客帝国动画版 8.8
蝙蝠侠:黑暗骑士归来(下) 8.8
桥 8.8
头号玩家 8.7
阿凡达 8.7
超能陆战队 8.7
加勒比海盗 8.7
被解救的姜戈 8.7
英雄本色 8.7
黑客帝国3:矩阵革命 8.7
谍影重重2 8.7
终结者2:审判日 8.7
黑鹰坠落 8.7
枪火 8.7
东邪西毒:终极版 8.7
精英部队2:大敌当前 8.7
椿三十郎 8.7
西线无战事 8.7
铁达尼号沉没记 8.7
岁城璃心-鬼蜮咒原 8.7
功夫 8.6
蜘蛛侠:平行宇宙 8.6
东邪西毒 8.6
疯狂的麦克斯4:狂暴之路 8.6
新龙门客栈 8.6
谍影重重 8.6
黑客帝国2:重装上阵 8.6
勇闯夺命岛 8.6
启示 8.6
恶童 8.6
宾虚 8.6
正义联盟:闪点悖论 8.6
钢铁巨人 8.6
敲开天堂的门 8.6
兽兵卫忍风帖 8.6
大菩萨岭 8.6
碧血金沙 8.6
落叶 8.6
滑铁卢战役 8.6
复仇者联盟4:终局之战 8.5
釜山行 8.5
变脸 8.5
无间道2 8.5
蝙蝠侠:侠影之谜 8.5
神探 8.5
暗战 8.5
角斗士 8.5
黄海 8.5
王牌对王牌 8.5
盗火线 8.5
阿基拉 8.5
精武门 8.5
杀死比尔整个血腥事件 8.5
侠女 8.5
午夜狂奔 8.5
最长的一天 8.5
红线 8.5
死亡的游戏 8.5
奈克瑟斯奥特曼剧场版 8.5
通往自由的通道 8.5
笔中情 8.5
船长二世 8.5
王牌特工:特工学院 8.4
小萝莉的猴神大叔 8.4
霍比特人3:五军之战 8.4
速度与激情5 8.4
罪恶之城 8.4
守望者 8.4
星球大战 8.4
精武英雄 8.4
星球大战前传3:西斯的复仇 8.4
星球大战2:帝国反击战 8.4
星球大战3:绝地归来 8.4
喋血双雄 8.4
荒野大镖客 8.4
魁拔Ⅲ战神崛起 8.4
猛龙过江 8.4
喊山 8.4
蝙蝠侠:红影迷踪 8.4
  • 动态加载数据的生成方式:

    • ajax请求
    • js
  • 日后对一个陌生的网站进行数据爬取,在编码之前必须要做的一件事情是什么?

    • 检测你要爬取的数据是否为动态加载的数据
      • 如果不是动态加载数据就可以直接对地址栏的url发起请求爬取数据
      • 如果是动态加载数据就需要基于抓包工具进行全局搜索爬取数据
  • 需求:

url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
city = input('enter a city name:')
for page in range(8):
    data = {
        'cname': '',
        'pid': '',
        'keyword': city,
        'pageIndex': str(page),
        'pageSize': '10',
    }
    #参数动态化使用的是data参数
    data_dict = requests.post(url=url,headers=headers,data=data).json()
    for item in data_dict['Table1']:
        if not item:
            pass
        print(item['storeName'], item['addressDetail'])
enter a city name:北京
育慧里 小营东路3号北京凯基伦购物中心一层西侧
京通新城 朝阳路杨闸环岛西北京通苑30号楼一层南侧
黄寺大街 黄寺大街15号北京城乡黄寺商厦
四季青桥 西四环北路117号北京欧尚超市F1、B1
亦庄 北京经济开发区西环北路18号F1+F2
石园南大街 通顺路石园西区南侧北京顺义西单商场石园分店一层、二层部分
北京站广场 北京站一层
北京南站 北京南站候车大厅B岛201号
北清路 北京北清路1号146区
大红门新世纪肯德基餐厅 海户屯北京新世纪服装商贸城一层南侧
巴沟 巴沟路2号北京华联万柳购物中心一层
亦庄沃尔玛 经济技术开发区文化园东路6号北京经开汇展中心1-2层
北京南站二 北京南站候车大厅地下一层(快速进站口1)部分场地
北京站Select 北京火车站候车大厅一层西侧原商务中心
西客站内三 莲花桥东路118号北京西客站候车大厅内2层第4营业厅及2层夹层回廊
通州北苑华联 杨庄北里五十二号天时名苑小区十四号楼北京华联南侧一层
西环嘉茂 北京北站旁 凯德mall负一层
日照银座餐厅 北京路与泰安路交汇处银座商城一楼
荆州北京路 北京中路227号肯德基餐厅
荆州月亮湾 沙市中商百货一楼北京路中路173号
金山 建新镇金山大道100号北京金山05店面
北京南站三 北京南站地下一层南大门内东侧场地快速进站口3与快速进站口4中间
北京南站五 北京南站地下一层到达层西南侧第5出站口旁
北京南站六 北京南站二层旅客出发层西南角(23B检票口)旁
北京站广场二 北京站进站口西侧前廊下
马坡汽车穿梭 马坡镇顺城大街29号北京乡村乐园一层
新城外城DT 南四环成寿寺路308号北京城外诚家居广场停车广场
铁路(西单商场) 北京南路895号铁路局西单商场1层肯德基餐厅
苏州路 北京南路28号家乐福苏州路购物中心一层肯德基餐厅
蒙苑 兴安北路169号北京华联一层
南昌 南昌路982号新北京华联一层
太原府东 府东街18号北京华联超一层
金利 新华路138号鑫乐广场(北京华联超市旁)
芜湖营盘山路 北京东路与营盘山路交叉口大润发超市一楼
钢铁大街 钢铁大街与三八路交汇处西北角北京华联超市底店
阜阳火车站 向阳路和北京东路交汇口
淮安北京路苏果 北京新村五区新苑逸城
小河 黔江路29号北京华联一层
金阳82266155 金阳新区北京西路金源时代购物中心一层
国酒路 仁怀市中枢镇酒都新区国酒大道超一时代广场一楼北京华联旁
白云 北京路延长线大白庙村家乐福超市一楼
北辰 北京路延长线财富中心E栋
购物广场 北海大道与北京路交汇处北海城购物广场首层
博乐友好 北京路与新华路交汇处友好购物中心肯德基餐厅
北京站SEL-2 北京站内二楼高架西一至四、西十六商亭
梦时代 北京东路308号恒茂梦时代国际广场三号楼一层
荆州万达 北京西路508号万达广场一层1001A
洪泽大润发 北京路与建设路交汇处
洪城大厦 西湖区北京西路156号一层洪城大厦肯德基
福润德餐厅 北京南路433号大寨沟福润德一楼肯德基餐厅
奎屯友好餐厅 飞鸿里北京东路3栋友好时尚购物中心1-2层
徐州泉山大润发 北京路与欣欣路交叉口大润发超市一层
大兴龙湖 龙湖北京大兴天街商业楼三层3F-10a铺位
徐州铜山万达 北京北路19号
西站南广场二号 北京西客站南站房东附楼一层105号铺位、104铺位和二层204铺位
银川悦海 尹家渠街东侧、枕水路南侧北京华联悦海新天地购物中心一层
十堰万达 发展大道与北京路延长线交汇处
银川新华联 通达北街以西北京路以北新华联广场1层、4层
沧州高铁站 北京路西端头高铁站候车大厅二楼
北海宁春城 北京路西、西南大道北和安.宁春城一期
宣堡服务区北 京沪高速公路宣堡服务区北楼1+2(往北京方向)
西郊百益餐厅 北京中路46号西郊百益超市一层
仰忠汇 越秀区北京路168号二层自编B201/L201号铺
南昌甜品站 南昌路982号北京华联5层
北京肯德基有限公司紫码路餐厅 阎村镇乐活家园45号楼一层109号商铺、二层109号商铺、二层108号商铺
拉萨功德林天街 北京中路47号1,2层
橘洲一号 北京东三路18号橘洲一号(2栋负一楼商铺)首层
十堰远洋国际 五堰街办北京北路83A号1幢2-1
新机场2号 大兴区北京大兴国际机场国际抵港区域
胜利门 沅陵县辰州中路北京公馆2栋1层
  • 需求:
  • 分析:
    • 尝试着将某一家企业的详情数据爬取到,然后再把此操作作用到其他家企业爬取到所有企业的数据。
    • 检测某一家企业详情数据是否为动态加载的数据
      • 基于抓包工具实现局部搜索
        • 结论:为动态加载数据
    • 基于抓包工具进行全局搜索定位动态加载数据的数据包,从数据包中提取url和请求参数
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
data = {
    'id':'d82345168acb46f8a8b1fad2c8b5adce'
}
detail_json = requests.post(url=url,headers=headers,data=data).json()
per_name = detail_json['businessPerson']
addr = detail_json['epsAddress']
print(per_name,addr)
赵小燕 浙江省杭州市临安区锦城街道新溪桥村新溪桥129 
#尝试着将所有企业的id获取,将其作用到post请求的参数中即可
#思考:id应该是和企业名称关联在一起的,只要找到企业名称就有可能找到企业id,发现企业名称是动态加载的
post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
for page in range(6):
    data = {
        'on': 'true',
        'page': str(page),
        'pageSize': '15',
        'productName': '',
        'conditionType': '1',
        'applyname': '',
        'applysn':'',
    }
    json_data = requests.post(url=post_url,headers=headers,data=data).json()
    for dic in json_data['list']:
        company_id = dic['ID']
        print(company_id)
ff83aff95c5541cdab5ca6e847514f88
557e10443606464b9d2bf745b13adfbf
73ebb83fe2ba4c06b4d7b17c3cf02a61
6446c70796074d20a30a2386de162233
54a46d5cec48475caca9b38c53d09dc8
0ea4126175e24f6084f9cfc0dd04bc04
d82345168acb46f8a8b1fad2c8b5adce
7aa5554ce10c4ee4bcde4ad4da41a9ea
6918deba7df14524b7883def822814ed
203c3e4cefcc4546b4d35634d0436b6a
6baac92a1c484846938ea0e1a66fcddb
10fa3880f9554667abfa5c8be12ba15c
be1531bae0a948f992dd65509ee1f94c
4cb197eda506448ca58da47e1cc54596
79f819d3028b45119fc8cfdd7a81bae7
ff83aff95c5541cdab5ca6e847514f88
557e10443606464b9d2bf745b13adfbf
73ebb83fe2ba4c06b4d7b17c3cf02a61
6446c70796074d20a30a2386de162233
54a46d5cec48475caca9b38c53d09dc8
0ea4126175e24f6084f9cfc0dd04bc04
d82345168acb46f8a8b1fad2c8b5adce
7aa5554ce10c4ee4bcde4ad4da41a9ea
6918deba7df14524b7883def822814ed
203c3e4cefcc4546b4d35634d0436b6a
6baac92a1c484846938ea0e1a66fcddb
10fa3880f9554667abfa5c8be12ba15c
be1531bae0a948f992dd65509ee1f94c
4cb197eda506448ca58da47e1cc54596
79f819d3028b45119fc8cfdd7a81bae7
00e08cff11a148f3b07ebb9073313a4e
3e0477861b844e859328667d635d661a
b158a1f7787e4749949192447d90107b
60262740691449fe8ae5c49b5f1a7f24
96bed063a4204d2a98bc9b2cf771aedf
e0c16440d7034dc997733ce5e4a34ff7
8972687f488145ea9a2c0bc6836aa061
d344f28fdc7743f88b3b121e092595fa
c758948db87c411b9d023a738bdb14a0
1e9946f1f0284435860aac7e3d7002b7
15f9ac35df964bdab95b5bd72c9e7e00
8a939373a42444218d7bf49909f57553
691ea71dfa604e51b4986b79613ec8c3
29fa5b1bc8904764a5fd7b7f6dadf9d8
ee44ae326e2d4d4fbad8d6ac2a1e080b
628e9db0f8dc465ca1270fd4946d0c9f
49fd67573d6641fabb9987cb83b1d876
9c93dde6da604800b781a2f0270634b5
2c6260fb9c57420b85e94c885b589972
741cacdb92eb471da2e6df0cf8572a04
aa91b9f9303e40c08cc2656f2582e362
55c97a33f66045eebc556f25463a7713
73d38483310444d7858ab5e457dc39f2
fab2fe43a9c141b491094a19d4797404
4c6bfe2220794ecf84367b2fe9fd38c9
73a578ec32184965aa45a1877c94b957
a7631852a3ed4313b570dad2bdc4d019
2365e12b2b554e5b864d495713eb895b
9a231b37921b49d58fc72db0f517b15b
6783d3ddc2ba4a5ca2325d05eeaed2de
006b7bbf272c44ce9e5cc4607771df2c
3e43c83c86144905a3be161d47fc258e
3dc687664e20413fbeedeb1e45b32e56
518a64462cc2417785ca8bcc5f33bf40
8477f68e18274fc1950418e4b8b3edd8
ce6609e11e734d11b5a74af5d565c665
c161d448291c4b149d521260a1f0835a
bf5e8c8a95014401b9f77ccb5c65c8b5
21c6ee178ebf4cb397f0c450db5ea32e
160aa0a2852841948f836e6aa5fa6973
a8ab085cb1d74842a6a2f1c4db908cdb
c6c0a187bdba47abb243a4ddcd0d1ff0
f15e7bf079b64b018c713f086f04bad9
c6a2f36a97f34eeaa73b3febe89d7ac5
d89b8cf372654f6c9dbea4d3ef2b41aa
58aa4dc609fa4215b9f8f4019288ce5b
e6c1aa332b274282b04659a6ea30430a
78a2bc3a239c4bc9a12d00d21ab208f3
9be6efae0f1d41a99db19413e51b8825
2324ed271a344f3c8ce05812c73eb5b4
86dd36f21b224314b76520bb2ebad1c4
6ad9a74b8b714c9d8f2eeecba29a570f
3b93ff75b6f34a968f2b1660165353ea
a2ba171b7718450cbb7908ab7f093f22
b3f59530d180454b8d4dca4fa4f540e4
942172fddcbf489a8abfc569dba839c8
3e3b23c4a5de45aab2feba2f64ecce62
4875331ad12f4c4a909d182b7e5dd7a4
2a3a7a79e9b6495bb42b66a957ae2463
1d640cc1416b410babf99082d3361937
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
data = {
    'id':'d82345168acb46f8a8b1fad2c8b5adce'
}
detail_json = requests.post(url=url,headers=headers,data=data).json()
per_name = detail_json['businessPerson']
addr = detail_json['epsAddress']
print(per_name,addr)
#完整代码
post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
fp = open('company_data.txt','a+',encoding='utf-8')
for page in range(6):
    data = {
        'on': 'true',
        'page': str(page),
        'pageSize': '15',
        'productName': '',
        'conditionType': '1',
        'applyname': '',
        'applysn':'',
    }
    json_data = requests.post(url=post_url,headers=headers,data=data).json()
    for dic in json_data['list']:
        company_id = dic['ID']

        url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
        data = {
            'id':company_id
        }
        detail_json = requests.post(url=url,headers=headers,data=data).json()
        per_name = detail_json['businessPerson']
        addr = detail_json['epsAddress']
        print(per_name,addr)
        fp.write(per_name+':'+addr+'
')
fp.close()
陈飞 广州市白云区均禾街清湖大塘大道11号(自主申报)
徐智慧 武汉市江夏区大桥新区工业二路7号
潘国华 珠海市南屏科技工业园屏西五路3号二期厂房五层、第四层C
谢贵生 南宁市青秀区伶俐镇民兴路2-1号伶俐工业园第7栋
李萍 北辰区宜兴埠科技园工业区兴中路二区8号
王鑫 天津市西青汽车工业园(张家窝工业园)泰进道4号
赵小燕 浙江省杭州市临安区锦城街道新溪桥村新溪桥129 
王明辉 云南省昆明市呈贡区云南白药街3686号
郑宏鸣 江西省宜春经济技术开发区春潮路3号
赵红斌 云南省昆明市宜良县匡远镇宝洪村委会马家营村小组
秦佳 广州市白云区金盆北路12号101房
黄华滔 广州市白云区嘉禾街新科科甲显兴路5号四楼(自主申报)
吴志程 广东省惠州市博罗县博罗县石湾镇石湾大道111-1号
沈政 广州市黄埔区玉岩路12号冠昊科技园区一期实验楼315-1房
黄法雄 广州市花都区花山镇两龙村育才东路11号
陈飞 广州市白云区均禾街清湖大塘大道11号(自主申报)
徐智慧 武汉市江夏区大桥新区工业二路7号
潘国华 珠海市南屏科技工业园屏西五路3号二期厂房五层、第四层C
谢贵生 南宁市青秀区伶俐镇民兴路2-1号伶俐工业园第7栋
李萍 北辰区宜兴埠科技园工业区兴中路二区8号
王鑫 天津市西青汽车工业园(张家窝工业园)泰进道4号
赵小燕 浙江省杭州市临安区锦城街道新溪桥村新溪桥129 
王明辉 云南省昆明市呈贡区云南白药街3686号
郑宏鸣 江西省宜春经济技术开发区春潮路3号
赵红斌 云南省昆明市宜良县匡远镇宝洪村委会马家营村小组
秦佳 广州市白云区金盆北路12号101房
黄华滔 广州市白云区嘉禾街新科科甲显兴路5号四楼(自主申报)
吴志程 广东省惠州市博罗县博罗县石湾镇石湾大道111-1号
沈政 广州市黄埔区玉岩路12号冠昊科技园区一期实验楼315-1房
黄法雄 广州市花都区花山镇两龙村育才东路11号
陈坚 广州市白云区江高镇神山雄郭西路128号3栋101房、201房(自主申报)
李宏超 洛阳空港产业集聚区(孟津县麻屯镇王村机场西路)
蒋定原 安徽省芜湖市弋江区高新技术开发区花津南路106号
修俊杰 中国(辽宁)自由贸易试验区大连经济技术开发区双D4街19-3号-2
熊瑶冬 武汉市汉南区汉南农场晨曦路
许越鸽 广州市白云区钟落潭镇金盆村金盆南路127号之五二楼(自主申报)
闫丽玲 广东省佛山市顺德区均安镇沙头社区均益路194号世友工业城2座601号(住所申报)
周喜芳 广州市白云区嘉禾街望岗工业三路自编36号德汇科技园东区6栋三楼
王海 四川省成都市都江堰市四川都江堰经济开发区堰华路618号
党永军 浙江省金华市义乌市廿三里街道义东工业园区靠近K1、K2
权波涛 广东从化经济开发区高技术产业园荔香路39号(厂房A)1-5楼
靳建顺 珠海高新区唐家湾镇港湾大道金星路7号1幢3、4、5层
张芸 广州市白云区均禾街罗岗村新星工业区1号A区
叶建峰 广州市经济技术开发区滨河路一号
邱少宏 泰州中国医药城口泰路西侧、陆家路东侧0006幢G53二层东侧
张何东 泰州医药高新技术产业园第五期标准厂房G129栋5-6层
CHO HYUN 海门市临江新区天目湖路1号
刘道新 武汉市蔡甸区沌口小区东风大道512号拜尔斯道夫工业园
邓森林 中国(江苏)自由贸易试验区苏州片区苏州工业园区钟南街428号
陆永平 浙江省金华市金东区曹宅镇工业功能区潘阳南街18号金华市浩沙针织厂2号厂房5-6楼
陈升权 浙江省金华市义乌市义亭镇五联路147号五楼
汝小珍 苏州市吴江区黎里镇黎民南路107号
张洪飞 吉林省长春市高新北区隆北路1380-1号
邱祥 浙江省金华市义乌市义亭镇黄林山工业区甘霖路3号
汪勤国 广州市白云区太和镇龙归夏良村龙河西北横三路11号南胜工业区C栋501(自主申报)
余华容 广州市花都区花东镇花景大道北8号
邓永兵 广州市白云区龙归夏良村第四经济社鸡嘴桥工业区二号
欧晓明 东源县仙塘工业园
邹义光 广州市白云区人和镇大巷鸭东街一巷5号(空港白云)
马乃奕 广州市白云区嘉禾望岗西岭南街2号西岭工业区17号
吴小强 南靖县南靖高新技术产业园区
俞小庆 厦门市集美区天凤路192号
赵纳 山东省潍坊市寒亭区民主街2009号寒亭高新技术产业园13A二楼
金衍华 浙江省湖州市吴兴区埭溪镇官泽路55号2幢
赵伟安 浙江省杭州市桐庐县桐庐经济开发区洋洲路99号办公楼二楼
吴夫苗 浙江省宁波市东钱湖旅游度假区俞塘村
陈轩宇 福州市仓山区金山福湾工业区阳岐路72号
谭先鸿 江西省上饶市余干县高新技术产业园
谭诗进 武汉市洪山区书城路28号(北港工业园内)
柯勇群 浙江省绍兴市嵊州市经济开发区浙锻路188号
许晓龙 广州市白云区良沙路1816号自编之二
刘清伟 苏州市吴江区黎里镇黎里国青路688号
陈华奇 海南省海口市国家高新技术产业开发区药谷工业园区药谷二路2号
胡攀 武汉经济技术开发区莲湖路6号
黄伟坤 广州市增城区新塘镇银沙工业区站前路3号(自主申报)
马发贤 汕头市潮阳区和平镇白石工业区一栋
谭阿琴 广州市从化区城郊街丽都路2号B栋
欧阳志军 广州市白云区江高镇神山管理区振华北路51号B栋
陈昭晖 广州市白云区均禾街罗岗村环村西路馨雨工业区8号
虞尔尔 浙江省宁波市海曙区望春工业园区科茂路336号
刘育真 辽宁省朝阳市喀左县利州工业园区森川路1号
赵文蔚 贵州省六盘水市钟山开发区闽商科技产业园6号楼B区4层
李晓春 贵州省贵阳市清镇市医药园区
王旭光 广州市花都区花山镇启源大道6号4栋401房
江金德 广州市白云区江高镇水沥松岭路4号101房、301房(自主申报)
许自贵 广州市白云区嘉禾街长红村双和工业区双和二路29号A栋4楼
赵阳林 广州市白云区江高镇私营试验区凤翔北路31号
席莉 广州市白云区江高镇珠江村凤翔南路47号3栋
熊慧 广州市白云区清湖村苏元庄盛鑫工业园二区A栋2-3楼
余平 广州市增城市增江街东区高科技工业基地
  • 图片数据的爬取
    • urllib
    • requests
      • urllib和requests的功能作用都几乎是一致。urllib是一个比较古老的网络请求模块,当requests问世后,就快速的替代了urllib。
#爬取图片方式1
url = 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=4250058738,780121024&fm=11&gp=0.jpg'
#content返回二进制类型的响应数据
img_data = requests.get(url=url,headers=headers).content
with open('123.png','wb') as fp:
    fp.write(img_data)
#爬取图片方式2
from urllib import request
url = 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=4250058738,780121024&fm=11&gp=0.jpg'
request.urlretrieve(url=url,filename='./456.png')

('./456.png', <http.client.HTTPMessage at 0x10887d400>)
  • 上述两者图片爬取方式的区别:
    • 方式1是可以进行UA伪装
    • 方式2无法进行UA伪装
原文地址:https://www.cnblogs.com/fengting0913/p/13150184.html