干货|只要三招学会简单网站爬虫全部技能

今天小编分享收藏三个爬虫网站的小技能,希望对你们有所帮助~

  1. 查看网页源代码和检查元素
  2. requests使用
  3. BeautifulSoup使用

查看网页源代码和检查元素

不要觉得很简单,这两招是爬虫的基础。如果你熟悉这两招,简单网站的爬虫,你就学会了一半。

一般来说,检查元素中看到的内容都会在网页源代码中出现。今天我选取的这个例子,情况特殊,检查元素中看到的内容部分会在网页源代码中出现

图片

比如爬北京的白天和夜间温度

北京天气的网址:

http://www.weather.com.cn/weather1d/101010100.shtml

下面是源代码,我会有注释的,跟着一起读一读

# -*- coding: utf-8 -*-

__author__ = 'duohappy'

import requests # 导入requests模块

from bs4 import BeautifulSoup # 从bs4包中导入BeautifulSoup模块

# 设置请求头

# 更换一下爬虫的User-Agent,这是最常规的爬虫设置

headers = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/57.0.2987.110 Safari/537.36'}

# 需要爬取的网址

url ="http://www.weather.com.cn/weather1d/101010100.shtml"

# 发送请求,获取的一个Response对象

web_data = requests.get(url,headers=headers)

# 设置web_data.text会采用web_data.encoding指定的编码,一般情况下不需要设置,requests会自动推断

# 鉴于网页大部分都是采取utf-8编码的,所以设置一下,省去一些麻烦

web_data.encoding = 'utf-8'

# 得到网页源代码

content = web_data.text

# 使用lxml解析器来创建Soup对象

soup = BeautifulSoup(content, 'lxml')

# 为什么要创建一个Soup对象,还记得浏览器中的检查元素功能嘛

# Soup对象可以方便和浏览器中检查元素看到的内容建立联系,下面会有动画演示

# 使用css selector语法,获取白天和夜间温度,下面有动画演示

tag_list = soup.select('p.tem span')

# tag_list[0]是一个bs4.element.Tag对象

# tag_list[0].text获得这个标签里的文本

day_temp = tag_list[0].text

night_temp = tag_list[1].text

print('白天温度为{0}℃n晚上温度为{1}℃'.format(day_temp, night_temp))

"Soup对象可以方便和浏览器中检查元素看到的内容建立联系"是什么意思?

简单点解释就是检查元素看到的样子和Soup对象中元素的样子差不多(这只是简单化理解)

图片

css seletor语法

值得提出的是当搜索’p.temem’时,刚好有****2个匹配*的对象,分别对应白天温度和夜间温度,这一点非常重要,如果匹配个数*大于或者小于2*,那么说明你的css selector*写错了!****

图片

爬多个城市的白天和夜间温度,搜索不同的城市天气,观察网址的变化。观察网址的变化是爬虫中最主要的本领之一~

# -*- coding: utf-8 -*-

__author__ = 'duohappy'

import requests

from bs4 import BeautifulSoup

headers = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/57.0.2987.110 Safari/537.36'}

# 建立城市和网址特殊部分的对应关系

weather_code = {'北京':'101010100','上海':'101020100','深圳':'101280601', '广州':'101280101', '杭州':'101210101'}

city = input('请输入城市名:') # 仅仅能输入北京,上海,广州,深圳,杭州

url ="http://www.weather.com.cn/weather1d/{}.shtml".format(weather_code[city])

web_data = requests.get(url,headers=headers)

web_data.encoding = 'utf-8'

content = web_data.text

soup = BeautifulSoup(content, 'lxml')

tag_list = soup.select('p.tem span')

day_temp = tag_list[0].text

night_temp = tag_list[1].text

print('白天温度为{0}℃n晚上温度为{1}℃'.format(day_temp, night_temp))

BeautifulSoup

BeautifulSoup是一个Python提供的一个第三方HTML网页解析工具包。对于一个网址,可以使用beautifulSoup对象的成员函数,直接找到相应的组件内容。对于像文本、资讯这样的内容,往往都是直接写进网页文本代码的。利用Google浏览器的开发者工具,我们可以直接阅读网页源码:

图片

可以使用右边那个小箭头直接定位到需要爬取的位置,就可以发现这些资讯都直接写在右边的源码当中。文字类资讯也不需要实时更新,也没有方便的数据维护方式。

使用bs对象进行find和处理,因此我们可以写出一个简单的代码:

1.bs = BeautifulSoup(html_news,'html.parser')

2.title = bs.find('h1').text

3.content= bs.find('div',class_='content-article').text //注意参数带下划线

4.content_str = "".join(re.findall('[0-9\u4e00-\u9fa5]', content))

但是我们可以看到,所有的段落都是在p组件里面的,那么代码也可以这样写:代码如下(示例):

1.cur_str = ""

2.bs = BeautifulSoup(html_news,'html.parser')

3.title = bs.find('h1').text

4.paras = bs.find_all('p',class_='one-p') //返回一个列表

5.for para in paras:

6.cur_str += "".join(re.findall('[0-9\u4e00-\u9fa5]', para.text))

这里使用了正则表达式来提取文字和数字。特别注意的是,find函数找到的是一个元素,而find_all返回的则是一个列表。re.find_all找到的也是一个列表,返回的时候要用””.join来拼接为一个字符串。实际上,BeautifulSoup的底层就是正则表达式,因此在成员函数上也很像。

学习资源推荐
除了上述分享,学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述
👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以V扫描下方二维码联系领取
保证100%免费

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值