我的第一个爬虫-爬虫入门

参加服务外包大赛的缘故,项目中需要用到很初级的爬虫,现在项目完结,就来稍稍总结一下。

pythonIDE:pycharm

python version:3

用到的模块

import urllib
import bs4
import re

简单的说一下,

(1)urllib模块是用来获取网页的,就是把网页下载下来。对于静态网页,你把网页源代码下载下来后就可以按图索骥寻找到网页上所有你想获取的内容。

(2)bs4模块是用来解析网页的,网页下载下来后就是一堆源代码,想要直接获取信息很不方便(字符串操作)。所以这个时候用到了bs4模块中的beautifulsoup。用这个可以把源代码划归成树状结构,也就是你可以通过一些标签和正则表达式索引到你想要的内容。

(3)re模块就是正则表达式的部分,在页面中按一定条件查询你想要的特定内容很方便。

第一步:侦察目标网站

这是我找到的比较合适的网站。我需要分好类的小学、初中、高中的课标诗词,恰好都能在这里找到。话不多说,开始进一步侦查。

 

这是在点入“小学古诗”页面后呈现的内容。

网站直接将所有诗词的目录列出,这实在是很方便的设计,无论对于读者还是对于爬虫。因为我们可以在这个目录页把所有要爬取的具体诗词网页url一次性获取到,省去了反复寻找“下一首”的操作。

随便找一首诗点进去,观察一下页面结构。

我用的是火狐浏览器,点击查看元素,查看一下页面结构。

 

结构一目了然,我们需要的就是下面这个代码块:

<div class="contson" id="contsoneeb3869b6242">
鹅,鹅,鹅,曲项向天歌。<br>白毛浮绿水,红掌拨清波。
</div>

经过确定,class=“contson”这个类只被用来存储诗词内容,所以在获取信息时,按照这个特征去找就没问题了。

OK,现在开始准备编写。

2.编写爬虫

回顾一下爬虫最简单的结构:下载网页、解析网页、获取信息。

我根据这些需求写了几个方法:

  • 根据参数中的url下载网页

def get_html(url):
    response=urllib.request.urlopen(url)
    html=response.read()
    return html

如之前所说,这里返回的html便是网页的源代码了。

  • 根据网页内容进行解析并获取信息

def get_poem(html):
    soup=bs4.BeautifulSoup(html)
    poem=soup.find(class_="contson").text
    poem=poem.replace('\n','')
    return poem

这里的soup.find(class_="contson")便是刚才观察到的储存诗词内容的块的特征了,find方法将会返回在本页面找到的第一个符合条件的标签(也就是我们需要的内容)。因为我们的存储格式不需要我们加换行符,于是我就用replace方法将其替换为了空字符。方法返回的poem就是我们需要的诗词内容了。

其实到这里基本逻辑就已经实现了,只需要填上合适的url,调用两个方法就可以获取到指定网页的诗词内容了。不过,懒惰终究是技术发展的第一生产力(狗头),一个个的填url未免太麻烦。于是,接下来继续。

  • 获取所有目标诗词网页的url

def get_urls(html):
    soup=bs4.BeautifulSoup(html)
    urls=soup.find_all('a',href=re.compile("shiwenv"))
    return urls

这里通过目录页把所有诗词的网页url收集起来,在爬取的时候通过一个简单的循环就可以把目录页中的所有诗词都遍历到。

find_all方法返回的是一个列表,即符合要求的所有标签。

  • 调用方法开始爬取

type_list = {"xiaoxue","chuzhong","gaozhong"}
for type in type_list:
    url = "https://so.gushiwen.org/gushi/{}.aspx".format(type)
    url_list = get_urls(get_html(url))
    for url in url_list:
        url = url['href']
        print(get_poem(get_html(url)))

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值