python自动化之爬虫原理及简单案例
【爬虫案例】动态地图里的数据如何抓取:以全国PPP综合信息平台网站为例 http://mp.weixin.qq.com/s/BXWTf5hmq8vp91ZvgaphEw
【爬虫案例】动态页面的抓取!以东方财富网基金行情数据为例 http://mp.weixin.qq.com/s/bbw5caz4EfJn5mwbDMVfuQ
【爬虫案例】获取历史天气数据 http://mp.weixin.qq.com/s/MlqJUuH0JjTujMzGJp_7kw
【爬虫案例】电影票房数据抓取 https://mp.weixin.qq.com/s/UgH53P86Y0nfY-67EDQ8wA
#####http://www.lishi.tianqi.com/yangzhong/201407.html
#####http://lishi.tianqi.com/yangzhong/201407.html
#####www.cbooo.cn/year?year=2016
#####www.cpppc.org:8082/efmisweb/ppp/projectLibrary/toPPPMap.do
#####fundact.eastmoney.com/banner/gp.html?from=groupmessage&isappinstalled=0
#
#http://lishi.tianqi.com/yangzhong/201407.html
##################################################################
##############爬取票房纪要
#####www.cbooo.cn/year?year=2016
1、确认搜的票房数据在代码里(Ctrl+F搜索出来)搜索关键字:如"美人鱼",是否在页面上
2、模板(对于数据在页面上适用):获取页面/解析网页
3、找到数据在哪?定位数据首选用id定位
4、返回列表的话找对应的项
#########采用解析器:'lxml',解析页面;也可以用html.parse解析器
分析数据在哪个框里面,这是一个table,定位方式首选用id定位
soup.find_all 找到所有table,限制条件为id=tbContent
里面每一个tr代表一行,一个电影即为一行,找到所有tr标签
td表示当中的每一个单元,找出当中第一个中的a标签中的title属性即为需要的电影名称
dd与dl是现在很少用的标签,表示为定义式,有点类似于字典
import requests ############获取页面
from bs4 import BeautifulSoup ############解析网页
year=2017
url='http://www.cbooo.cn/year?year='+str(year)
rawhtml=requests.get(url).content
print(type(rawhtml))
soup=BeautifulSoup(rawhtml,'lxml') #########采用解析器:'lxml',解析页面;也可以用html.parse解析器
###soup.select('dl.dltext dd')
###有快捷的方式:能把所有标签去掉,soup.select('dl.dltext dd')[0].get_text()
def getYear(year):
#year=2017
url='http://www.cbooo.cn/year?year='+str(year)
rawhtml=requests.get(url).content
#print(type(rawhtml))
soup=BeautifulSoup(rawhtml,'lxml') #########采用解析器:'lxml',解析页面;也可以用html.parse解析器
#print(type(soup))
return soup
def getInfo(url):
rawhtml=requests.get(url).content
soup=BeautifulSoup(rawhtml,'lxml')
return soup
print(type(soup))
movies_table=soup.find_all('table',{'id':"tbContent"})[0] ####用find_all()方法,通过table标签,加上字典参数,属性为id=tbContent
movies=movies_table.find_all('tr')
moviename=[movie.find_all('td')[0].a.get('title') for movie in movies[1:]]
movielink=[movie.find_all('td')[0].a.get('href') for movie in movies[1:]]
movietype=[movie.find_all('td')[1].string for movie in movies[1:]]
movieboxoffice =[int(movie.find_all('td')[2].string) for movie in movies[1:]]
#moviedirector=[getInfo(url).find_all('dl',{'class':'dltext'})[0].find_all('dd')[0].a.get('title') for url in movielink]
moviedirector=[getInfo(url).select('dl.dltext dd')[0].get_text() for url in movielink]
############转成数据框&统计分析
import pandas as pd
df=pd.DataFrame({'names':moviename,'types':movietype,'boxoffice':movieboxoffice,'link':movielink,'directors':moviedirector})
import numpy as np
df.groupby('types').agg({'boxoffice':["count","mean"]})
#############写到文件中
df.to_csv(r'C:\Users\Administrator\Desktop\电影.csv')
标签是div,div在html中意思为一个块集
确认html页面真的存在代码中
确认数据在代码中,即好爬,如果不在代码中,用js进行渲染,即不好爬
再看有没有翻页,没有翻页,即OK
这里以一个电影评分的网站为例,介绍数据抓取的基本流程和方法。
标准配置:
--requests:抓取网址的HTML内容
--BeautifulSoup:解析HTML源码,提供方便的查询接口
--re:正则表达式,通过描述规则从字符中提取需要的数据
(这里不作介绍)
import requests ########获取页面
from bs4 import BeautifulSoup #######解析网页
url='http://www.cbooo.cn/year?year=2016'
rawhtml=requests.get(url).content #######获取内容
##################################################################
##############爬取天气纪要
###############http://www.tianqihoubao.com/weather/top/shenzhen.html
##############数据抓取:
##############某些情况下需要从网络抓取数据,比如舆情监控需要抓取相关的新闻内容;
##############判断天气原因是否对超市的销量有影响时,除了已有的销量数据外还需要从
##############网络抓取每日的天气数据
1、下载的url数据
2、在谷歌浏览器右键:检查,找到每一行数据在不在网页代码中,找到整个下载数据是个table,tblite_go
3、一页一页加载时,发现问题:网址未发生变化,没有刷新
1)打开network,点击每一页时发现Request URL不一致,此时表明为异步加载;
2)将不同页的链接复制出来,查看区别;
3)找到规律,将链接查看,即对应数据;
4)由于r.content为乱码,r.text为中文格式;
5)解析;
6)每一页写入;
import requests ############获取页面
from bs4 import BeautifulSoup ############解析网页
url='http://www.tianqihoubao.com/weather/top/shenzhen.html'
rawhtml=requests.get(url).content
weatherhtml=BeautifulSoup(rawhtml,'lxml')
dateset=[weather.find_all('td')[1].b.a.string for weather in weatherhtml.find_all('table')[0].find_all('tr')[2:]]
dayweatherset=[weather.find_all('td')[2].string for weather in weatherhtml.find_all('table')[0].find_all('tr')[2:]]
daywindset=[weather.find_all('td')[3].string for weather in weatherhtml.find_all('table')[0].find_all('tr')[2:]]
daytempset=[weather.find_all('td')[4].string for weather in weatherhtml.find_all('table')[0].find_all('tr')[2:]]
nightweatherset=[weather.find_all('td')[5].string for weather in weatherhtml.find_all('table')[0].find_all('tr')[2:]]
nightwindset=[weather.find_all('td')[6].string for weather in weatherhtml.find_all('table')[0].find_all('tr')[2:]]
nighttempset=[weather.find_all('td')[7].string for weather in weatherhtml.find_all('table')[0].find_all('tr')[2:]]
import pandas as pd
df=pd.DataFrame({'日期':dateset,'白天天气':dayweatherset,'白天风向':daywindset,'白天温度':daytempset,'晚上天气':nightweatherset,'晚上风向':nightwindset,'晚上温度':nighttempset})
import numpy as np
df.to_csv(r'C:\Users\Administrator\Desktop\天气.csv')
python自动化之爬虫原理及简单案例的更多相关文章
- python——flask常见接口开发(简单案例)
python——flask常见接口开发(简单案例)原创 大蛇王 发布于2019-01-24 11:34:06 阅读数 5208 收藏展开 版本:python3.5+ 模块:flask 目标:开发一个只 ...
- 爬虫之scrapy简单案例之猫眼
在爬虫py文件下 class TopSpider(scrapy.Spider): name = 'top' allowed_domains = ['maoyan.com'] start_urls = ...
- 使用python开发ansible自定义模块的简单案例
安装的版本ansible版本<=2.7,<=2.8是不行的哦 安装模块 pip install ansible==2.7 先导出环境变量 我们自定义模块的目录. 我存放的目录 export ...
- python自动化之爬虫模拟登录
http://selenium-python.readthedocs.io/locating-elements.html ####################################### ...
- python静态网页爬虫之xpath(简单的博客更新提醒功能)
直接上代码: #!/usr/bin/env python3 #antuor:Alan #-*- coding: utf-8 -*- import requests from lxml import e ...
- 爬虫之CrawlSpider简单案例之读书网
项目名py文件下 class DsSpider(CrawlSpider): name = 'ds' allowed_domains = ['dushu.com'] start_urls = ['htt ...
- 微软最强 Python 自动化工具开源了!不用写一行代码!
1. 前言 最近,微软开源了一款非常强大的 Python 自动化依赖库:playwright-python 它支持主流的浏览器,包含:Chrome.Firefox.Safari.Microsoft E ...
- 阿里最强 Python 自动化工具开源了!
1. 前言 大家好,我是安果! 最近,阿里内部开源了一个 iOS 端由 Python 编写的自动化工具,即:tidevice 它是一款跨平台的自动化开源工具,不依赖 Xcode 就可以启动 WebDr ...
- Python分布式爬虫原理
转载 permike 原文 Python分布式爬虫原理 首先,我们先来看看,如果是人正常的行为,是如何获取网页内容的. (1)打开浏览器,输入URL,打开源网页 (2)选取我们想要的内容,包括标题,作 ...
随机推荐
- Django Rest Framework源码剖析(二)-----权限
一.简介 在上一篇博客中已经介绍了django rest framework 对于认证的源码流程,以及实现过程,当用户经过认证之后下一步就是涉及到权限的问题.比如订单的业务只能VIP才能查看,所以这时 ...
- 20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
20155330 <网络对抗> Exp6 信息搜集与漏洞扫描 基础问题回答 哪些组织负责DNS,IP的管理? 互联网名称与数字地址分配机构(The Internet Corporation ...
- [LOJ#6068]. 「2017 山东一轮集训 Day4」棋盘[费用流]
题意 题目链接 分析 考虑每个棋子对对应的横向纵向的极大区间的影响:记之前这个区间中的点数为 \(x\) ,那么此次多配对的数量即 \(x\) . 考虑费用流,\(S\rightarrow 横向区间 ...
- 用C语言操作MySQL数据库,进行连接、插入、修改、删除等操作
C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 3 ...
- STM8S——8位基本定时器(TIM4)
简介:该定时器由一个带可编程预分频器的8位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能. 主要功能: (1)8位向上计数的自动重载计数器: (2)3位可编程的预分配器(可在运 ...
- C#_IO操作
1.创建文件夹 //using System.IO; Directory.CreateDirectory(%%1); 2.创建文件 //using System.IO; File.Create(% ...
- ansible自动化工具安装和简单使用
ansible自动化工具安装和简单使用 1.安装 ansible依赖于Python 2.6或更高的版本.paramiko.PyYAML及Jinja2. 2.1 编译安装 解决依赖关系 # yum -y ...
- AHD/TVI/CVI/CVBS/IP
1.CVBS是最早的模拟摄像机,现在看来效果差. 2.AHD TVI CVI都是模拟摄像机的升级版,俗称同轴,三种名称只是用的方案系统不一样而已,相比模拟的效果清晰,和模拟的外观都是一样的bn ...
- AssetBundleMaster
AssetBundleMaster is an integrated solution for build AssetBundle and load assets from AssetBundles ...
- Codejam Qualification Round 2019
本渣清明节 闲里偷忙 做了一下codejam 水平不出意外的在投稿之后一落千丈 后两题的hidden test竟然都挂了 A. Foregone Solution 水题,稍微判断一下特殊情况(比如10 ...