小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
一、什么是爬虫
爬虫就是把一个网站里的内容读取下来,这里我们就要学习一个知识,我们看到的网页是有一种叫HTML的语言编写的,他可以给文字显示不同的样式如:<p>hello</p>
就会显示段落:hello
二、如何获取网页的内容
一般爬虫不会把网页内容爬下来,而是把网页源代码爬下来
就好比说:hello
会爬到 <p>hello</p>
如果要在浏览器上看源代码,只需在网页上右键
点击 选择查看网页源代码
即可,那么怎么用python把源代码爬下来呢?这是要下载一个模块
在cmd里输入:
pip install requests
复制代码
然后就可以用模块requests爬网页了
import requests # 导入模块
url = 'https://sina.com.cn' # 要爬的网址新浪
html = requests.get(url) # 获取网页源代码
print(html.text) # 输出 注:需要text函数来返回源代码
复制代码
输出:
细心的人可以看到后面的代码有编码问题
要把代码转成utf-8中文编码
import requests
url = 'https://sina.com.cn'
html = requests.get(url)
html.encoding = 'utf-8' # 将编码设为utf-8中文编码
print(html.text)
复制代码
输出
三、分析源代码
最后要在源代码中筛选出我们要的数据
需要用到模块 lxml
在cmd里输入:
pip install lxml
然后就要使用lxml来筛选数据
import requests
from lxml import etree
url = 'https://sina.com.cn'
html = requests.get(url)
html.encoding = 'utf-8'
element = etree.HTML(html.text) # 获取html
result = element.xpath('//a/text()') # 进行筛选
for i in result:
print(i) # 输出
复制代码
输出:
其中核心语句是
result = element.xpath('//a/text()')
复制代码
而 //a/text() 的意思是获取所以的a标签的值
复制代码
而常用的xpath
语法如下:
nodename | 选取此节点的所有子节点 |
---|---|
/ | 从当前节点选取直接子节点 |
// | 从当前节点选取子孙节点 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
-
| 通配符,选择所有元素节点与元素名 复制代码
@* | 选取所有属性
[@attrib] | 选取具有给定属性的所有元素
[@attrib='value'] | 选取给定属性具有给定值的所有元素
[tag] | 选取所有具有指定元素的直接子节点
[tag='text'] | 选取所有具有指定元素并且文本内容是text节点
四、筛选实例
如果要在sina.com.cn
读取部分新闻
那么要在键盘上按下F12
点左上角的按钮
鼠标悬停在新闻上再点击
在代码栏中找新闻
再找到所有新闻的父元素
这里可以看到ul的class为list-a news_top
在python中写:
import requests
from lxml import etree
url = 'https://sina.com.cn'
html = requests.get(url)
html.encoding = 'utf-8'
element = etree.HTML(html.text)
result = element.xpath('//ul[@class="list-a news_top"]//a/text()') # 进行筛选
for i in result:
print(i)
复制代码
输出
更多有关Python学习经验分享,可以关注我,持续更新。
近期评论