【第十五章】python之爬虫入门

作者: 你好夜故事 | 来源:发表于2018-08-28 17:43 被阅读2次

何谓“爬虫”,即抓取别人网页上面的数据,占为己有。爬虫运用及其广泛,比如x来了,爬取其他交通软件获取相关公交动态信息,得到何时到站,你自己还可以爬取某天气网站获取最新天气信息。
接下来我们开始进行爬取被人的网站数据吧。
https://www.dy2018.com/html/gndy/dyzz/index_2.html最新热门电影,网页数据图片如下:

电影天堂最新电影

军训演示

安装python环境就不提了,不懂的可以看我前面几章进行学习。
我们直接从代码出发:

# coding : UTF-8
import requests
from bs4 import BeautifulSoup

if __name__ == '__main__':
    try:
        target = 'https://www.dy2018.com/html/gndy/dyzz/index.html' #定义访问的地址
        req = requests.get(target)
        # 处理中文乱码
        html = req.content.decode('gbk','ignore')
        bf = BeautifulSoup(html)
        tables = bf.find_all('table',{'class':'tbspan'}) #查找class=tbspan的table
        for table in tables:
            movieName = table.find_all('tr')[1].text.strip() #查找到第一个元素并去掉空格
            moveClickNum = table.find_all('tr')[2].text.strip() #查找到第二个元素并去掉空格
            print(movieName," ",moveClickNum)
    except Exception as e:
        print(e) #输出异常
运行结果:
解释:

python爬取数据非常简单,你可以直接使用requests工具类进行获取数据,比如requests.get(target),就能拿到你所爬取的网页所有内容。
但拿到所有内容,其实还包括很多不需要用到的,比如html元素之类的,这时,我们又要借助BeautifulSoup这个工具类:bf = BeautifulSoup(html),创建成功后,直接使用bf.find_all或者bf.find进行过滤数据。

下面我来稍微提一下find_all和find它们两者的核心区别:
find_all拿到的其实相当于java中的集合,find拿到的是对象,对象可以直接.get_text(),但集合不行,还需定位都某一个对象,这就是他们的核心区别。

真枪实弹

如果你对上面爬取最新电影python代码没什么问题的话,我们继续把它升级改造一下:获取全部最新电影。
你应该发现,它只是第一页,我们现在要做的就是自动给它翻页,拿取直至最后一页的数据。

# coding : UTF-8
import requests
from bs4 import BeautifulSoup

class GetMaoYanTop100:
    def getMoviesInfo(self,i):
        target = 'https://www.dy2018.com/html/gndy/dyzz/index.html'
        if i!=1:
            target = 'https://www.dy2018.com/html/gndy/dyzz/index_'+i+'.html'
        try:
            target = 'https://www.dy2018.com/html/gndy/dyzz/index_3.html'
            req = requests.get(target)
            # 处理中文乱码
            html = req.content.decode('gbk','ignore')
            bf = BeautifulSoup(html)
            tables = bf.find_all('table',{'class':'tbspan'})
            for table in tables:
                movieName = table.find_all('tr')[1].text.strip()
                moveClickNum = table.find_all('tr')[2].text.strip()
                print(movieName," ",moveClickNum)
        except Exception as e:
            print(e) #输出异常

if __name__ == '__main__':
    object = GetMaoYanTop100()
    i=1
    while i<=300:
        object.getMoviesInfo(i)

好了,下面的代码没写太多注释,大家可以复制手动运行一次,或者使用debugger进行逐步查看,有不懂的地方可以在下方留言,后面一章节我们继续python爬虫,更加高难度。
上一章,【python之操作mysql增删改查】
下一章,暂无

相关文章

网友评论

    本文标题:【第十五章】python之爬虫入门

    本文链接:https://www.haomeiwen.com/subject/gksqwftx.html