学了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(" ") == -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这个关键字没有搞清楚,导致在使用这些变量时处于一种“不清不楚”的状态。
- 对于字符串的操作还不熟悉,需要练习
总之啊,路还长