python爬虫爬取网页将特定信息存入excel

背景
1、最近遇到一个需要进行数据分析的项目,主要是将网页上需要的信息,进行归拢,分析。当信息量少的时候,采用复制粘贴-excel分析还比较快捷方便,当如果数据上升到几百甚至几千条时,一个一个的复制粘贴,就明显感觉效率低下,难以操作。
2、之前也一直听说过python爬虫,趁着这个机会正好来实验一波。笔者几年前曾学过python,有一定的基础。

需求分析:
1、目的:通过python爬虫,实现批量化抓取网页中的有效信息,然后将信息,一条一条的存储到excel中。最后通过用excel进行最后的数据统计分析。
2、功能需求
a,读取网页
b,抓取网页特定内容
c,将内容按顺序存储到excel中

功能实现
爬虫的本质是,编写程序,让程序模拟人操作浏览器进行网页访问。本文以豆瓣电影为例,实现爬取某类型影片的排名信息

网页分析

当打开豆瓣电影分类排行榜,选择动作片后,出现的页面如下。

当页面的进度条拖到最下面,会直接刷新出新的页面,而不是重新刷新整个页面,这用的就是阿贾克斯网页动态局部加载技术。

下面右键网页,选择检查,切换到Network选项,筛选出XHR选项


把进度条继续拖动到最下面,发现刷新出了,一个请求信息。

双击这个请求,可以看到Response里面是一个类似json格式的数据,里面信息刚好就是对应着页面中的电影信息

切换到Headers选项,仔细看下网页的请求接口,如果能找到这个请求接口,那么就可以python中request模块访问该接口,网页反馈的是类似json格式的数据,如果这一步走通了,接下来就好办了。那先来看下请求接口。


可以看到,请求的地址是https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=100&limit=20,请求的方式是GET。参数以后type,interval_id,action,start,limit。
通过对headers分析,发现,请求里面有5个参数,那这个参数都是什么含义呢?写python程序是需要对这些参数赋什么值呢?
其实爬虫我们要重点关注返回的数据,请求我们只要保证请求命令能正常得到反馈就行了。所以我们只需要找到这个请求中,哪些参数是变化的,然后分析出这个参数的含义,对于不变的参数,程序中就按照网页headers里面的填写即可。
要找到变化的参数,只需要往下拉进度条,看新的请求数据


可以看到,里面只有start变化了,start 80;limit 20 ; start100 ; limit 20 。是不是可以猜测,这个20就是每次刷新的影片数量?start就是要从排名第几的影片开始读取?

通过初步分析下网页,这个可能性极大,要验证也简单呀,还记得里面的请求是GET,那么可以用浏览器直接访问该接口验证一下。
start =1 limit=2,刷新出来了这个杀手不太冷和七武士两部影片


start =2 limit=3,刷新出来了七武士、切腹、蝙蝠侠:黑暗骑士三部影片。由此可以验证start为从排名第几的影片开始请求。limit为每次请求影片数量。如果我想抓取排名前300的影片,那只需要将start=1,limit=300即可。网页分析到这里就可以了,已经得到了我们想要的信息
1、接口:https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=2&limit=3
2、请求方式:GET
3、参数:type interval_id action start limit 前面三个是固定不变的

小结:
1、本部分,通过分析网页,发现豆瓣影片排名采用的是网页局部动态加载技术
2、在检查里,筛选出来了动态加载的请求接口,以及请求的反馈是类json格式(便于后期python解析),以及通过猜想和直接调用接口,找到start和limit两个参数含义

python代码编写

1、User_agent介绍
如果你是豆瓣网站的开发者,那你希望别人采用非正规的方式来批量抓取你网站里面的数据吗?稍微想一下,答案肯定是否定的。那么网站服务器怎么确定当前的访问是合法的呢?最基础的方式就是利用请求载体的身份识别信息User_agent来做,不同的浏览器都有不同的身份识别信息
如下是笔者谷歌浏览器的身份识别信息。那么为了防止写的程序求被服务器拒绝访问,在用request模块请求的时候要带上身份识别信息。

2、代码
先直接上代码,及excel数据


```python
#!/user/bin/env python
# -*- coding:utf-8 -*-#UA:User-Agent(请求载体的身份标识)
#UA检测,网站检测到UA不是正常浏览器身份标识,则服务器端很有可能会拒绝该请求
#UA伪装,让爬虫对应的请求载体UA标识伪装成某一浏览器#解析豆瓣电影
#页面局部刷新 XHR请求import requests
import json
import xlwings as xw# 指定url,发起请求,获取响应数据,存储
if  __name__ == "__main__":#UA:将对应的User_Agent封装到一个字典中headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'}url= "https://movie.douban.com/j/chart/top_list"start_num = input("enter start num:")limit_num = input("enter limit num:")param = {'type': '5','interval_id': '100:90','action':'', 'start': start_num,'limit': limit_num,}#处理url携带的参数:封装到字典中response = requests.get(url=url, params=param,headers = headers)# print(response.text)# ps_name = json.loads(response.text).get('ps_name')# print('\r\n',ps_name)#确认服务器返回的json则可以使用jsondic_obj = response.json()# json_name = json.loads(dic_obj)app=xw.App(visible=False,add_book=False)wb=app.books.add()sht = wb.sheets['Sheet1']sht.range('A1').value ='序号' sht.range('B1').value ='排名' sht.range('C1').value ='名称' sht.range('D1').value ='评分' sht.range('E1').value ='上映日期' sht.range('F1').value ='国家' i=1for dic_item in dic_obj:print('cnt:',i,'title ',dic_item['title'],'\r\n')sht.range('A'+str(i+1)).value =i sht.range('B'+str(i+1)).value = dic_item['rank']sht.range('C'+str(i+1)).value = dic_item['title']sht.range('D'+str(i+1)).value = dic_item['rating'][0]sht.range('E'+str(i+1)).value = dic_item['release_date']sht.range('F'+str(i+1)).value = dic_item['regions'][0]i +=1wb.save('movie_rank.xlsx')wb.close()app.quit()

执行一下,程序已经在正确输出信息了

打开生成的excel,需要的信息已经生成,剩下的分析就看你的excel能力了

如果在完善下程序,分析页面后发现type是对应的电影类型,5:动作;11:剧情。可以把type全部试出来,然后放入字典里,实现指定抓取某一类型的电影。笔者完成的是动作电影的抓取。

代码分析

使用到的模块

requests
json
xlwings

requests是网络请求的库,xlwings是操作excel的库,可支持xlxs格式文件。

    #UA:将对应的User_Agent封装到一个字典中headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'}url= "https://movie.douban.com/j/chart/top_list"start_num = input("enter start num:")limit_num = input("enter limit num:")param = {'type': '5','interval_id': '100:90','action':'', 'start': start_num,'limit': limit_num,}

这一部分是定义头,访问接口,以及参数,变化的参数采用终端输入。

    #处理url携带的参数:封装到字典中response = requests.get(url=url, params=param,headers = headers)

用get命令访问,有的网页采用的可能是post,需要与网页实际的请求方式保持一致。浏览器地址栏里只能实现get请求,post请求可以用postman等工具验证

    dic_obj = response.json()# json_name = json.loads(dic_obj)app=xw.App(visible=False,add_book=False)wb=app.books.add()sht = wb.sheets['Sheet1']sht.range('A1').value ='序号' sht.range('B1').value ='排名' sht.range('C1').value ='名称' sht.range('D1').value ='评分' sht.range('E1').value ='上映日期' sht.range('F1').value ='国家' i=1for dic_item in dic_obj:print('cnt:',i,'title ',dic_item['title'],'\r\n')sht.range('A'+str(i+1)).value =i sht.range('B'+str(i+1)).value = dic_item['rank']sht.range('C'+str(i+1)).value = dic_item['title']sht.range('D'+str(i+1)).value = dic_item['rating'][0]sht.range('E'+str(i+1)).value = dic_item['release_date']sht.range('F'+str(i+1)).value = dic_item['regions'][0]i +=1wb.save('movie_rank.xlsx')wb.close()app.quit()

这一部分实现,读取返回的json格式数据,转换后的数据实际上是字典。
操作excel5部曲
1、建立APP
2、建立books
3、建立sheet页
4、数据写入
5、保存关闭

sht.range(‘A1’).value=‘序号’
表示向A1单元格写入序号,如果需要向B10写入,就将上面的A1改为B10,操作起来十分方便。

python实现爬取网页将特定信息存入excel相关推荐

  1. python爬虫-爬取当当网书籍信息存到Excel中

    文章目录 一.任务 二.分析 (一).单页面的信息分析 源代码分析 目标信息定位与分析 代码设计 (二).所有目标页面链接分析 目标链接分析 代码设计 三.注意要点 四.完整代码 五.参考 一.任务 ...

  2. python爬虫爬取实习僧岗位信息并存入excel数据表中

    欢迎访问我的个人网站http://liubofeng.com 网页分析 博主在本博客中爬取的是数据分析岗位. 进入网站首页https://www.shixiseng.com/搜索数据分析,F12审查元 ...

  3. python爬虫代码1000行-几行Python代码爬取3000+上市公司的信息

    几行Python代码爬取3000+上市公司的信息 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 几行Python代码爬取3000+上市公司的信息.txt ] (友情提示:右键 ...

  4. Python爬虫爬取网页数据并存储(一)

    Python爬虫爬取网页数据并存储(一) 环境搭建 爬虫基本原理 urllib库使用 requests库使用 正则表达式 一个示例 环境搭建 1.需要事先安装anaconda(或Python3.7)和 ...

  5. python 爬虫 爬取高考录取分数线 信息

    原文链接: python 爬虫 爬取高考录取分数线 信息 上一篇: axios 原生上传xlsx文件 下一篇: pandas 表格 数据补全空值 网页 https://gkcx.eol.cn/scho ...

  6. python初学-爬取网页数据

    python初学-爬取网页数据 1,获取网页源代码 import urllib url = 'http://www.163.com'wp = urllib.urlopen(url) file_cont ...

  7. python+selenium爬取智联招聘信息

    python+selenium爬取智联招聘信息 需求 准备 代码 结果 需求 老板给了我一份公司名单(大概几百家如下图),让我到网上看看这些公司分别在招聘哪些岗位,通过分析他们的招聘需求大致能推断出我 ...

  8. python爬虫爬取网页新闻标题-看完保证你会

    python爬虫爬取网页新闻标题方法 1.首先使用浏览自带的工具--检查,查找网页新闻标题对应的元素位置,这里查到的新闻标题是在 h3 标签中 2.然后使用编辑器编写python代码 2.1方法一: ...

  9. python xpath爬取豆瓣图书Top 250存入csv文件并解决csv乱码问题

    我上次分享过关于爬取豆瓣电影top250的实战:BeautifulSoup爬取豆瓣电影top250信息 和 python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格 , ...

  10. python3和burpsuite组合爬取网页数据并存储在excel表格(需要登录后才能看到的大量数据)

    python3和burpsuite组合爬取网页数据并存储在excel表格 作者:ch4nge 时间:2020.12.18 前言 最近在工作中遇到一个问题:渗透进入某网站后台,发现大量的用户数据(某恶意 ...

最新文章

  1. ASP.NET ViewState 初探
  2. SpringBoot 第十篇: 用spring Restdocs创建API文档
  3. opencv3 ubuntu安装脚本
  4. 【.NET基础】--委托、事件、线程(2)
  5. 如何将python项目部署到服务器_部署python项目到linux服务器
  6. Jartto: 如何成为一名合格的技术面试官?
  7. android带方框倒计时,简单漂亮的彩色方块计时器和倒计时js代码
  8. debian mysql中文乱码_MySQL中文乱码的解决方法汇总
  9. 存储过程返回结果集_PostgreSQL函数返回结果集
  10. 不可重复读和幻读的区别_面试官:MySQL的可重复读级别能解决幻读吗
  11. 定义输入回溯法解决0-1背包问题
  12. linux--kubectl命令和docker命令
  13. 解决PyCharm出现无法连接Docker的问题
  14. 软件设计师中级-UML建模
  15. Lisp-Stat翻译 —— 第十章 一些动态绘图实例
  16. hihocoder题目选讲
  17. 计算化学对计算机知识的要求,计算化学软件对大学有机化学教学的应用
  18. 安卓手机虚拟键盘和position:fixed问题
  19. 360校招编程之城市修建
  20. c语言cmp函数含义,【C艹】关于sort用法之重构cmp(comp)函数的笔记

热门文章

  1. 微信小程序毕业设计 基于微信共享小程序系统开题报告
  2. USBCleaner v6.0 Build 20080327 - U盘病毒专杀工具
  3. C++多线程并发(五)---原子操作与无锁编程
  4. <EDEM 基础案例05>Screw Auger
  5. 卷积神经网络完整总结
  6. 【博弈论】取棋子游戏
  7. 计算机写程序的步骤,电脑怎么编程 电脑编程的方法
  8. android 同屏 软件,同屏助手安卓版
  9. 用python做产出数据分析案例_利用python进行数据分析——医院销售额案例
  10. 【验证小白】只有SV+modelsim学验证(3)——加checker到环境中