python爬虫零基础实战
content1.什么是爬虫?2.为什么用python做网页爬虫3.python环境配置4.我需要了解哪些python爬虫的前置知识5.关于正则表达式6.提取网页内容并用正则表达式处理7.xPath和BeautifulSoup工具简介? ? 1.爬虫简介 简单来讲,爬虫就是一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。 互联网就像一张网,中间以各种链接连接在一起,而小小的爬虫却能在这张网上欢快的驰骋,代替人来进行很多繁重的任务,如抢票软件、某度搜索引擎。 ? ? ? 2.为什么用python做网页爬虫 python作为一门易上手的语言,提供了丰富的API来抓取网页文档、模拟浏览器行为、对抓取到的数据进行处理。后面我们的演示中也会展示Python爬虫的简介,爬取网页内容的核心代码可能只有短短几行,却能实现强大的功能。 ? ? 3.python环境配置 对于新手来说,最熟悉的还是windows环境。我使用的是anaconda+pycharm进行python代码的编写,这里anaconda方便进行外部库的管理,而pycharm也是功能强大很流行的一款IDE。详细的配置过程参见博客:? ? ?anaconda和pycharm的安装与配置?。 ? 4.我需要了解哪些Python爬虫的前置知识 至少会一点python的基础知识,如果不清楚的话,可以参加浙大翁恺的python慕课,或者自己找些介绍文档,如? ? ? ?python入门教程。同时需要了解关于html的一些基础知识,比如各种标签代表的含义: 熟悉上面这些html标签将会方便我们进行正则表达式的处理,以及xPath和BeautifulSoup的学习。 ? 5. 关于正则表达式 ? python正则表达式相关知识较多,我们只需要了解一些基础的即可,如: python正则表达式 菜鸟教程 python正则表达式官方文档 ? 6.提取网页内容并用正则表达式处理 ? import re urllib.request chardet response=urllib.request.urlopen("http://news.hit.edu.cn/")#输入参数为你想爬取的网页URL html=response.read() #读取到html变量中 chardet1=chardet.detect(html) #获取编码方式 html=html.decode(chardet1['encoding']) #按照获取到的编码方式进行处理 ? 这里我们以某高校的官方新闻网站为例演示来进行Python爬虫操作,上面短短的几行代码就实现了将网页内容爬取到本地的操作。 接着就是对爬取到的内容进行正则表达式处理,得到我们想要获取的内容,观察网页源代码:
我们希望对其中的外部链接进行匹配,由之前了解到的正则表达式知识,实现如下: mypatten=<li class="link-item"><a href="(.*)"><span>(.*)</span></a></li> mylist=re.findall(mypatten,html) for i in mylist: print(外部链接地址:%s 网站名:%s" %(i[0],i[1])) 最后得到的效果是: ? 7.xPath和BeautifulSoup工具简介 除了用正则表达式处理得到的网页文档之外,我们还可以考虑网页自身的架构。
nodename选取此节点的所有子节点 在这里列出了XPath的常用匹配规则,例如 / 代表选取直接子节点,// 代表选择所有子孙节点,. 代表选取当前节点,.. 代表选取当前节点的父节点,@ 则是加了属性的限定,选取匹配属性的特定节点。 from lxml etree chardet response=urllib.request.urlopen(https://www.dahe.cn) html=response.read() chardet1=chardet.detect(html) html=html.decode(chardet1[']) etreehtml=etree.HTML(html) mylist=etreehtml.xpath(/html/body/div/div/div/div/div/ul/div/li")
from bs4 BeautifulSoup file = open(./aa.html',rb) html = file.read() bs = BeautifulSoup(html,1)">html.parser") # 缩进格式 print(bs.prettify()) 格式化html结构 print(bs.title) 获取title标签的名称 print(bs.title.name) 获取title标签的文本内容 print(bs.title.string) 获取head标签的所有内容 print(bs.head) 获取第一个div标签中的所有内容 print(bs.div) 获取第一个div标签的id的值 print(bs.div[id"]) 获取第一个a标签中的所有内容 print(bs.a) 获取所有的a标签中的所有内容 print(bs.find_all(a")) 获取id="u1" print(bs.find(id=u1 获取所有的a标签,并遍历打印a标签中的href的值 for item in bs.find_all(): print(item.get(href 获取所有的a标签,并遍历打印a标签的文本值 print(item.get_text()) ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |