python beautifulsoup爬虫
爬虫这个听起来很 hack 的名字,是我学习 python 的诱因.当 python 基础学习到一定程度(基本语法,数据类型掌握) 就可以开启自己的小爬虫了.毕竟实践才是提高的最快途径.废话说完了,下面直接开始:
廖凯峰的 python 基础教程
做爬虫需要几步呢? 概况来说需要两步:
第一步是从网络上获取数据(大部分是html)
第二步就是解析数据
1. 从网站获取数据
这里我使用 requests 模块来代替内建模块 urllib
import requests
import random
url = 'http://www.weather.com.cn/weather/101010100.shtml' # 数据地址,从浏览器copy
header = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept-Language': 'zh-CN,zh;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3226.400 QQBrowser/9.6.11681.400'
}
timeout = random.choice(range(80, 180)) # 超时时间
req = requests.get(url, headers=header, timeout=timeout)
req.encoding = 'utf-8' # 防止中文乱码
code = req.status_code # 返回状态,200代表OK
print(code)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
header 的作用: requests模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的服务器获取界面,而浏览器在发送请求的时候会携带一些基本的信息作为 header 传递给服务器.服务器会根据 header 里的信息来判断如何返回数据,或者返回什么类型的数据,例如返回的数据是否可以压缩,是否返回移动端展示的界面.因此为了避免不必要的错误,在发送GET请求时,最好带上header.至于header的内容,可以通过浏览器调试,或者fiddler获取.
这时我们获得了想要的数据,可以用 print(req.text)查看
2. 解析数据
我们用 bs4 模块来解析获得的数据
当我们利用print(req.text)打印数据后,会发现整整有1000多行.其实这些数据就是在浏览器中查看网页源码的数据.为了方便的找到对我们有用的数据,我们需要 bs4 的 BeautifulSoup 类来完成.
Beautiful Soup 中文文档
from bs4 import BeautifulSoup
soup = BeautifulSoup(req.text, 'html.parser')
# 分析得 <ul class="t clearfix"> 标签下记录了我们想要的数据,因此只需要解析这个标签即可
ul_tag = soup.find('ul', 't clearfix') # 利用 css 查找
print(ul_tag) # 取出七天数据
# 打印每一天数据
li_tag = ul_tag.findAll('li')
for tag in li_tag:
print(tag.find('h1').string) # 时间
print(tag.find('p', 'wea').string) # wea
# 温度的tag格式不统一,做容错
try:
print(tag.find('p', 'tem').find('span').string) # 高温
print(tag.find('p', 'tem').find('i').string) # 低温
except:
print('没有高温或低温数据')
pass
print(tag.find('p', 'win').find('i').string) # win
print("_______________ 分割线 ____________________")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
# 结果:
4日(今天)
晴间多云转晴转多云
33℃
20℃
微风
_______________ 分割线 ____________________
25日(明天)
多云转晴
32℃
19℃
微风
_______________ 分割线 ____________________
26日(后天)
多云转阵雨
29℃
18℃
微风
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
# 部分网页源码
<ul class="t clearfix">
<li class="sky skyid lv2 on">
<h1>24日(今天)</h1>
<big class="png40 d00"></big>
<big class="png40 n01"></big>
<p class="wea" title="晴间多云转晴转多云">晴间多云转晴转多云</p>
<p class="tem">
<span>33℃</span>/
<i>20℃</i>
</p>
<p class="win">
<em>
<span title="北风" class="N"></span>
<span title="北风" class="N"></span>
</em>
<i>微风</i>
</p>
<div class="slid"></div>
</li>
<li class="sky skyid lv2">
<h1>25日(明天)</h1>
<big class="png40 d01"></big>
<big class="png40 n00"></big>
<p class="wea" title="多云转晴转晴">多云转晴</p>
<p class="tem">
<span>32℃</span>/
<i>19℃</i>
</p>
<p class="win">
<em>
<span title="西风" class="W"></span>
<span title="北风" class="N"></span>
</em>
<i>微风</i>
- 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
- 32
- 33
- 34
- 35
3. 总结
1 此网站获取数据还是很方便的,甚至可以不传header.
2 数据解析前要自己查看网页源码,之后有一个大概的获取范围和思路
3 数据解析方法对应特定的数据格式,不通用.
4 有效代码只有30行,python 语音果真 是“优雅”.“明确”.“简单”
python beautifulsoup爬虫的更多相关文章
- python BeautifulSoup 爬虫运行出现 exited with code -1073741571
首先,exited with code -1073741571意思是栈溢出.具体可以看https://blog.csdn.net/vblittleboy/article/details/6613815 ...
- python beautifulsoup爬虫学习
BeautifulSoup(page_html, "lxml").select(),这里可以通过浏览器开发者模式选择copy selector,并且并不需要完整路径. github ...
- Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据
目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...
- python网络爬虫之解析网页的BeautifulSoup(爬取电影图片)[三]
目录 前言 一.BeautifulSoup的基本语法 二.爬取网页图片 扩展学习 后记 前言 本章同样是解析一个网页的结构信息 在上章内容中(python网络爬虫之解析网页的正则表达式(爬取4k动漫图 ...
- Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片
Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片, ...
- 利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器
相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10-20 ...
- Python简单爬虫入门三
我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...
- Python简单爬虫入门二
接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...
- [Python] 网络爬虫和正则表达式学习总结
以前在学校做科研都是直接利用网上共享的一些数据,就像我们经常说的dataset.beachmark等等.但是,对于实际的工业需求来说,爬取网络的数据是必须的并且是首要的.最近在国内一家互联网公司实习, ...
随机推荐
- MySQL —— 基本查询方法
MySQL —— 简单查询与按条件查询 在MySQL中从数据表中查询数据的基本语句时select语句. select语句基本语法格式: select 查询内容 from 表名 ...
- zoj3261变形并查集
需要变形的并查集,这题错了好久,一直没a掉,终于在重写第三次的时候a了 先保存数据,把不需要拆分的边合并,逆向计算,需要拆分时就合并,之前不知道为啥写搓了,tle好久 #include<map& ...
- js将 HTML 页面生成 PDF 并下载
最近碰到个需求,需要把当前页面生成 pdf,并下载.弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) 先来科普两个插件: html2Canvas 简介 我们可以直接在浏览器端使用html2 ...
- 本地Run Page时报检测到意外的 URL 参数,它将被忽略。
经查,是因为我RUN的时候 Target URL -- http://MY-PC:8988/OA_HTML/runregion.jsp 将MY-PC更改为本地IP即可. 设置方法 Tools - Em ...
- 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类
from:http://www.freebuf.com/articles/system/182566.html 0×01 前言 目前的恶意样本检测方法可以分为两大类:静态检测和动态检测.静态检测是指并 ...
- 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 09_Git patch(补丁)操作
Git打补丁,补丁操作一般在多人开发时才会用到,单人本地开发一般用不到,没必要. 应用场景举例: 我把我的更改打成一个补丁发给你,你来合并到你的代码中 或者,在家里电脑开发提交后,打一个补丁,拿到 ...
- Howto: 在ArcGIS10中将地图文档(mxd文档)批量保存到之前版本
Howto: 在ArcGIS10中将地图文档(mxd文档)批量保存到之前版本 文章编号 : 38783 软件: ArcGIS - ArcEditor 10 ArcGIS - ArcInfo 10 A ...
- c#常日期转换(转)
DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2.Text = dt.ToFile ...
- Scrum立会报告+燃尽图 06
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2289] 版本控制:https://git.coding.net/liuyy08 ...