爬虫实例之豆瓣高分电影

学了python这么久,终于写了一个小爬虫,虽然很简单,但是总算动手了。

这个爬虫小程序爬取了豆瓣高分榜前100的电影名,所用到的知识也十分简单。

以下是源码

import re
import requests
import string
class spider:
    def init(self):
        self.page = 0
        self.top_num = 1
        self.cur_url = "https://movie.douban.com/top250?start={page}&filter="
        self.datas = []
        #print("it's init!")

    def downloader(self,cur_page):
        try :
            my_page = requests.get(self.cur_url.format(page=cur_page * 25)).text
        except requests.urllib.error.URLError as e:
            if hasattr(e, "code"):
                print("The server couldn't fulfill the request.")
                print("Error code: %s" % e.code)
            elif hasattr(e, "reason"):
                print("We failed to reach a server. Please check your url and read the Reason")
                print("Reason: %s" % e.reason)
        #print("this is downloader!")
        return my_page

    def parser(self,Page):
        pat = re.compile(r'<span.*?class="title">(.*?)</span>')

        #返回一个列表
        title = pat.findall(Page,re.S)   


        for index,item in enumerate(title):
            if item.find("&nbsp") == -1:
                self.datas.append("Top"+str(self.top_num)+" "+item)
                #print(item)
                self.top_num += 1

        #print("this is parser")

        

    def spider_main(self):
        self.init()
        while self.page < 4:
            Page = self.downloader(self.page)
            self.parser(Page)
            self.page +=1


def main():
    print("开始爬虫")
    my_spider = spider()
    my_spider.spider_main()
    for item in my_spider.datas:
        print(item)

    print("爬虫结束")

if __name__ == '__main__':
    main()

之前学习了Python的基本数据结构,但是在用到时才发现学的比较零散,用的时候不知道该怎么用,还是需要更多的项目来练习。

在这个简单的项目中,也出现了一些小问题:

  • 对于url的产生 没有理解到位,在网页下载器中,会有一个需要下载页面的url,而在这里,这个url是由初始url和一个page参数组成。因此,在下载器中应该传入一个page参数。
  • 对于类中变量的是不是需要self这个关键字没有搞清楚,导致在使用这些变量时处于一种“不清不楚”的状态。
  • 对于字符串的操作还不熟悉,需要练习

总之啊,路还长

posted @ 2017-10-12 19:51  HHello_World  阅读(611)  评论(0编辑  收藏  举报