Python怎么实现爬取豆瓣电影信息功能

  介绍

小编给大家分享一下Python怎么实现爬取豆瓣电影信息功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

具体如下:

本案例的任务为,爬取豆瓣电影top250的电影信息(包括序号,电影名称,导演和主演,评分以及经典台词),并将信息作为字典形式保存进txt文件。这里只用库到请求,没有用到beautifulsoup库

步骤1:首先获取每一页的源代码,用requests.get函数获取,为了防止请求错误,使用试…除了. .

 def  getpage (url):
  尝试才能:
  ,,,res=requests.get (url)
  ,,,if  res.status_code==200:
  ,,,,,return  res.text
  ,,,return 没有
  except 才能;RequestException:
  ,,,return 没有

步骤2:做每一页的网址解析,打开原网址https://movie.douban.com/top250?查看网页源代码,可以看到每一个电影的源代码都是从& lt; li>开始,在& lt;/li>处结束,写好正则表达式以后爬到的列表的每一条产品都有五个元素,因此将其写成字典的形式,这里用到收益率函数(关于收益率函数的用法,廖老师的有一篇文章比较好懂https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/)

 Python怎么实现爬取豆瓣电影信息功能

对单个网页的进行解析的代码如下:

def  parsepage (html):   帕特才能=re.compile (& # 39; & lt; li>。* ? & lt; em 类=啊白4?. * ?)& lt;/em>。* ? & lt; img 宽度=?00“,alt=?. * ?)“, src=https://www.yisu.com/zixun/? ?

"   +”(. * ?)

。* ?财产=" v:平均"> (. * ?) . * ? (. * ?) 。* ?李 ',re.S)   项目=re.findall (pat, html)   项目的项目:   收益率{   “指数”:项目[0],   “标题”:项目[1],   “明星”:项目[2].strip (),   “分数”:项目[3],   “概念”:项目[4]   }

下面的代码是将每一个项目写入文件,这里编码=& # 39;utf - 8 # 39;和ensure_ascii=False都是使写入文件时中文能保持不变,json。转储可以将(字典)对象转化成字符串(但前面要先导入json),用开放的第二个参数为,表示每次写入时,是往后追加(续接),而不是后一次写入将之前内容覆盖,\ n是指要每一次写入一个项目之后要换行。

def  write_tofile(内容):   with 才能打开(& # 39;doubanfilms.txt& # 39;, & # 39;一个# 39;,编码=& # 39;utf - 8 # 39;,), as  f:   ,,,f.write (json.dumps(内容、ensure_ascii=False) + & # 39; \ n # 39;)   ,,,f.close ()

最后,需要用循环语句将每一页(共10页)内容都进行以上操作。这里,第二页的网址就是在第一页的url上加上一个=25开始,第三页是加上开始=50,也就是每一页的开始=为25 *我。最后一段代码如下:

def 主要():   url=才能“https://movie.douban.com/top250?"   for 才能小姐:拷贝范围(0,9):   ,,,url_i url=+ & # 39;开始=& # 39;+ str(25 *我)   ,,,html_i=getpage (url_i)   ,,,for  item 拷贝parsepage (html_i):   ,,,,,印刷(项)   ,,,,,write_tofile(项)   if  __name__ ==, & # 39; __main__ # 39;:   以前,,main ()

当然,这一段代码还有一种写法:

def 主要(开始):   url=才能“https://movie.douban.com/top250?start=" + str(开始)   html=才能getpage (url)   for 才能;item 拷贝parsepage (html):   ,,,印刷(项)   ,,,write_tofile(项)   if  __name__ ==, & # 39; __main__ # 39;:   for 才能小姐:拷贝范围(10):   ,,,主要(我* 10)

如果想让你的程序跑的更快,可以用多线程爬虫(当然这里其实没有必要):

#在最开始加包载池   得到multiprocessing  import 池   #最后的执行段改为:   if  __name__ ==, & # 39; __main__ # 39;:   for 才能小姐:拷贝范围(10):   ,,,主要(我* 10)   池=池才能(),#在循环外写   pool.map才能(主,(我* 10,for 小姐:拷贝range  (10)))

以上是“Python怎么实现爬取豆瓣电影信息功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

Python怎么实现爬取豆瓣电影信息功能