当前位置: 首页 > 后端技术 > Python

Python爬虫入门第一课

时间:2023-03-25 20:20:07 Python

爬虫基本流程准备工作#分析页面等获取数据,分析内容,保存数据,设计思路,确定要爬取页面的url地址,通过http请求获取http页面,并提取html页面的有用数据:如果是保存所需内容b.如果是url地址,则执行步骤2继续提取。可以做爬虫的语言有很多,比如PHP、java、c/c++、python等,PHP并不是为此而设计的。并且对多线程和异步的支持不够好。如果并发处理能力高,爬虫就是一个对效率要求很高的工具程序。Java的网络爬虫生态也很完备,是python最大的对手。但是java本身比较笨重,代码量大。重构的成本很高,任何修改都会导致大量的代码改动。爬虫经常需要修改部分内容。C/C++的运行效率几乎是最强的,但是学习成本高,代码形成比较慢。能够使用C/C++作为爬虫并不是正确的选择。Python语法优美,代码简洁,开发效率高,支持模块多,包括大量的http请求模块,以及强大的爬虫Scrapy,以及成熟高效的分发策略,其他接口也是veryconvenient(gluelanguage)generalcrawler专注于爬虫一个通用爬虫搜索引擎的爬虫系统。目标:尽可能下载互联网上所有的网页,形成备份,然后对这些网页进行相关处理,最终为用户提供一个搜索界面。在其他网站上设置外部链接(友情链接、外部链接)。搜索引擎将与DNS服务提供商合作,以快速收录新网站。万能爬虫不是什么都能爬,还需要遵守约定。(robots协议规定了哪些可以爬,哪些不可以爬//不是所有的爬虫都遵守,一般只有大型搜索引擎才会遵守,自己写的爬虫我们不管)通用爬虫工作流程爬取网页----存储数据----内容处理----提供检索/排名服务通用爬虫缺点:只能提供文本相关的内容(html、word等),多媒体不能提供内容(音乐、图片等)提供的内容是一样的,不能对不同的人有不同的结果,不能理解人的语义检索。专注于爬虫为了解决一般爬虫存在的问题,针对某个内容的爬虫是面向主题的爬虫,针对特定内容爬取信息。http和https如何工作请求和响应。请求主要分为get和post两种(区别:是否隐藏信息)。urllib2库的基本使用是第一个爬虫程序importurllib2ua_headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36"}#通过urllib2.Request()方法构造请求对象request=urllib2.Request("http://www.baidu.com/",headers=ua_headers)#向指定的发送请求url地址,并返回服务器响应的类文件对象response=urllib2.urlopen(request)#服务器返回的类文件对象支持Python文件对象的操作方法#read()方法是读取文件中所有内容并返回字符串html=response.read()#返回HTTP响应码,成功返回200,4服务器页面错误,以5开头,服务器问题printresponse.getcode()#返回actualURL返回实际数据以防止重定向问题printresponse.geturl()#返回t的HTTPheaderheserverresponseprintresponse.info()注意:user-agent必须设置内容(模拟浏览器),反向爬上奋斗的第一步。第二个爬虫程序(反爬user-agent列表)importurllib2importrandomurl="http://www.baidu.com/"#可以是User-Agent列表或代理列表ua_list=["Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv2.0.1)Gecko/20100101Firefox/4.0.1”,“Mozilla/5.0(WindowsNT6.1;rv2.0.1)Gecko/20100101Firefox/4.0.1”,“Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;en)Presto/2.8.131Version/11.11","Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11","Mozilla/5.0(Macintosh;IntelMacOSX10\_7\_0)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11"]#从User-Agent列表中随机选择一个User-AgentAgentuser_agent=random.choice(ua_list)#构造一个请求request=urllib2.Request(url)#add_header()方法添加/修改一个HTTP头#也可以使用第一种方法request.add_header("User-Agent",user_agent)#get_header()获取一个已有的HTTPheader的值,注意只有首字母大写,一个d其余必须小写printrequest.get_header("User-agent")get和postget的区别:url带参数post:url不带参数get请求参数保存在queryStringpost请求单数以porm形式保存保存第三个爬虫程序:(模拟post请求的爬虫)importurllibimporturllib2#抓包得到的url不是浏览器显示的urlurl="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"#Completeheaders#注意去除原始数据headers上缺失和不可用的信息={"Accept":"application/json,text/javascript,*/*;q=0.01","X-Requested-With":"XMLHttpRequest","User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36","Content-Type":"application/x-www-form-urlencoded;charset=UTF-8",}#用户界面输入key=raw_input("请输入要翻译的文字:")#Form发送到网络服务器的数据(通过抓包获得)formdata={"type":"AUTO","i":key,"doctype":"json","xmlVersion":"1.8","keyfrom":"fanyi.web","ue":"UTF-8","action":"FY_BY_CLICKBUTTON","typoResult":"true"}#urlencode转码后(有中文需要转码)data=urllib.urlencode(formdata)#如果Request()方法中的data参数有值,那么请求就是POST#如果不是,就是Get#因为get没有请求体,post有请求体request=urllib2.Request(url,data=data,headers=headers)printurllib2.urlopen(request).read()ajax中获取数据的方法异步ajax加载方式加载的页面,数据格式必须是json获取json,即获取数据获取importurllibimporturllib2url="https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action"#Requestheaderheaders={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36"}#post要传输的表单原始数据formdata={"start":"0","limit":"20"}#转码成可识别的postdata=urllib.urlencode(formdata)请求=urllib2。Request(url,data=data,headers=headers)printurllib2.urlopen(request).read()##直接请求得到json就是我们要的数据。使用cookie模拟登录importurllib2url="http://www.renren.com/410043129/profile"headers={"Host":"www.renren.com","Connection":"keep-alive",#“升级不安全请求”:“1”,“用户代理”:“Mozilla/5.0(Windows新台币10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8","Referer":"http://www.renren.com/SysHome.do",#########################################这个东西是千万不能要!!!#"Accept-Encoding":"gzip,deflate,sdch","Cookie":"anonymid=ixrna3fysufnwv;_r01_=1;depovince=GW;jebe_key=f6fb270b-d06d-42e6-8b53-e67c3156aa7e%7Cc13c37f53bca9e1e7132d4b58ce00fa3%7C1484060607478%7C1%7C1484400895379;jebe_key=f6fb270b-d06d-42e6-8b53-e67c3156aa7e%7Cc13c37f53bca9e1e7132d4b58ce00fa3%7C1484060607478%7C1%7C1484400890914;JSESSIONID=abcX8s_OqSGsYeRg5vHMv;jebecookies=0c5f9b0d-03d8-4e6a-b7a9-3845d04a9870|||||;ick_login=8a429d6c-78b4-4e79-8fd5-33323cd9e2bc;_de=BF09EE3A28DED52E6B65F6A4705D973F1383380866D39FF5;p=0cedb18d0982741d12ffc9a0d93670e09;ap=327550029;first_login_flag=1;ln_uact=mr_mao_hacker@163.com;ln_hurl=http://hdn.xnimg.cn/照片/hdn521/20140529/1055/h_main_9A3Z_e0c300019f6a195a.jpg;t=56c0c522b5b068fdee708aeb1056ee819;societyguester=56c0c522b5b068fdee708aeb1056ee819;id=327550029;xnsid=5ea75bd6;loginfrom=syshome","Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6",}request=urllib2.Request(url,headers=headers)response=urllib2.urlopen(请求)printresponse.read()访问https协议页面importurllib2###########添加内容############################importssl#忽略SSL安全认证context=ssl._create_unverified_context()url="https://www.12306.cn/mormhweb/"#url="https://www.baidu.com/"headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/54.0.2840.99Safari/537.36"}request=urllib2.Request(url,headers=headers)#添加到上下文参数response=urllib2.urlopen(request,context=context)printresponse.read()·