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

Data-Crawler-03静态网络爬虫

时间:2023-03-26 18:03:40 Python

Data-Crawler-03静态网络爬虫创新区分领导者和追随者。--SteveJobs本文主要来自《PythonWebCrawlerfromGettingStartedtoPractice》一书第一部分3章,以及其网站给出的代码。原文是查询Top250豆瓣电影。这里我稍微改动了一下查询Top250的书籍(虽然差别不大,但是还是略有不同,所以安心)。再次感谢原作者。1.环境配置这里我们需要的环境和上次大致相同,使用requests库和bs4库,可以参考上一篇文章。另外还需要一个lxml库来帮助解析页面,终端输入condainstall-ndata_env_37lxml进行安装。2.预备知识【静态页面】静态页面,即静态网页,是真实存在的,不需要服务器编译。它们直接加载到客户端的浏览器中并显示。纯HTML格式的网页通常被称为静态网页。静态页面无法连接到数据库。【请求相关知识】获取请求基本请求:response=requests.get('http://www.XXX.com')带参数请求:拼接url:response=requests.get('http://www.XXX.com/getkey1=value1')使用字典:params={'key1':'value1','key2':'value2'}response=requests.get('http://www.XXX.com/get',params)requestheaderheader:发送请求时,需要加上请求头,这是伪装成浏览器的关键。常见的headers包括:Host:确定具体网站user-agent:客户端信息cookie:Cookie信息,请求有单独的参数处理,headers不需要放例子:headers={'Host':'www.XXX.com','user-agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_15_4)AppleWebKit/605.1.15(KHTML,likeGecko)Version/13.1Safari/605.1.15'}response=requests.get('http://www.XXX.com/',headers=headers)cookie:如果先登录,获取cookie,然后直接使用cookie登录,不用输入账号密码等信息;示例(具体用法请参考相应章节)cookie={'gr_user_id':'2ba4825d-8cca-4eb7-a6eb-7be30bf50182;_pk_id.100001.3ac3=8c58c830841ee6ec.1586701964.4.1586783454.1'}response=requests.get('http://www.XXX=.com',在超时请求中,可以使用timeout参数设置等待时间(秒),以免导致爬虫因错误而永远等待示例response=requests.get('http://www.XXX.com',timeout=0.001)POST请求POST请求会发送一个表单,而数据不会出现在URL中(如果登录时请求是POST,如果是GET会在URL中显示密码),用法和GET类似,使用requests.post()Response响应对象r=requests.get('http://wwww.XXX.com/')。r.text:响应页面内容;r.content:二进制页面内容,会自动解码gzip和deflate编码内容;r.status_code:响应状态码(200请求成功;4XX客户端错误;5XX服务器错误响应)r.headers:服务器头和本次响应;r.cookies:获取或设置与响应关联的标头;r.cookies.get_dict():获取字典形式的cookie;r.url:响应的url地址;河history:查看页面是从哪个url重定向过来的;r.encoding:响应内容的编码格式;r.json():Requests内置的JSON解码器。3、网页分析网页豆瓣阅读Top250Robots的原站可以通过检测工具搜索到,也可以直接查询https://book.douban.com/robot...,User-agent:*Disallow:/subject_searchDisallow:/searchDisallow:/new_subjectDisallow:/service/iframeDisallow:/j/Sitemap:http://www.douban.com/sitemap_index.xmlSitemap:http://www.douban.com/sitemap_updated_index.xmlUser-agent:WandoujiaSpiderDisallow://top250不在Disallow里面,大家放心爬吧(应该是的,如果我的认知有误,请提醒我,请不要恶意攻击网站)。请求头header使用浏览器的开发工具,打开方式参考【上文】()打开要抓取的网页,右键选择“InspectElement”,如图1;选择网络如2,打开top250文件,可以看到header信息如4;这里我们以safari为例,其他浏览器大致相同,大家自行理解,如果不显示,可以尝试刷新页面。翻页处理由于一页只能显示25本书,要显示250本书,需要10页的内容;打开页面发现其网址特征:第一页:https://book.douban.com/top25..第二页:https://book.douban.com/top25...第三页:https://book.douban.com/top25...第十页:https://book.douban.com/top25...可以看出,每增加一页,start参数需要加25,很容易去处理。页面解析与之前相同。我们使用浏览器的开发者工具查找要爬取的信息,发现位于pl2类4.codeimportrequestsfrombs4importBeautifulSoupdefget_books():#1.Getpageheaders={'user-agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_15_4)AppleWebKit/605.1.15(KHTML,likeGecko)Version/13.1Safari/605.1.15','Host':'book.douban.com'}book_list=[]foriinrange(0,10):url='https://book.douban.com/top250?start='+str(i*25)response=requests.get(url,headers=headers,timeout=15)print('page:',str(i),';Status:',response.status_code)#2.解析页面soup=BeautifulSoup(response.text,"lxml")title_list=soup.find_all('div',class_='pl2')fortitleintitle_list:#Deletenull由于字幕的存在,部分书名中间出现换行和空格book=title.a.text.strip().replace('\n','').replace('','')book_list.append(book)#3.写文件withopen('03_books.txt','a+')asf:forbookinbook_list:f.write(book+'\n')returnget_books()print(《完结》)参考资料Python网络爬虫从入门到实践第2章爬虫书籍代码爬虫基本原理及请求、响应详解