重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下Python怎么实现爬取豆瓣电影信息功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了伊春免费建站欢迎大家使用!具体如下:
本案例的任务为,爬取豆瓣电影top250的电影信息(包括序号、电影名称、导演和主演、评分以及经典台词),并将信息作为字典形式保存进txt文件。这里只用到requests库,没有用到beautifulsoup库
step1:首先获取每一页的源代码,用requests.get函数获取,为了防止请求错误,使用try...except..
def getpage(url): try: res=requests.get(url) if res.status_code==200: return res.text return None except RequestException: return None
step2:做每一页的网址解析,打开原网址https://movie.douban.com/top250?,查看网页源代码,可以看到每一个电影的源代码都是从
对单个网页的进行解析的代码如下:
def parsepage(html): pat=re.compile('
下面的代码是将每一个item写入文件,这里encoding='utf-8' 和ensure_ascii=False都是使写入文件时中文能保持不变,json.dumps可以将(字典)对象转化成字符串(但前面要先import json),with open的第二个参数为a,表示每次写入时,是往后追加(续接),而不是后一次写入将之前内容覆盖,\n是指要每一次写入一个item之后要换行。
def write_tofile(content): with open('doubanfilms.txt','a',encoding='utf-8' ) as f: f.write(json.dumps(content,ensure_ascii=False)+'\n') f.close()
最后,需要用循环语句将每一页(共10页)内容都进行以上操作。这里,第二页的网址就是在第一页的url上加上一个start=25, 第三页是加上start=50,也就是每一页的start=为25*i。最后一段代码如下:
def main(): url="https://movie.douban.com/top250?" for i in range(0,9): url_i=url+'start='+str(25*i) html_i=getpage(url_i) for item in parsepage(html_i): print(item) write_tofile(item) if __name__ == '__main__': main()
当然,这一段代码还有一种写法:
def main(start): url="https://movie.douban.com/top250?start="+str(start) html=getpage(url) for item in parsepage(html): print(item) write_tofile(item) if __name__ == '__main__': for i in range(10): main(i*10)
如果想让你的程序跑的更快,可以用多线程爬虫(当然这里其实没有必要):
#在最开始加载Pool包 from multiprocessing import Pool #最后的执行段改为: if __name__ == '__main__': for i in range(10): main(i*10) pool=Pool() #在循环外写 pool.map(main,[i*10 for i in range (10)])
以上是“Python怎么实现爬取豆瓣电影信息功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联成都网站设计公司行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。