今天小编分享收藏三个爬虫网站的小技能,希望对你们有所帮助~
- 查看网页源代码和检查元素
- requests使用
- 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%免费
】