爬取豆瓣Top250电影的评分、海报、影评等数据!

  本项目是爬虫中最基础的,最简单的一例;

后面会有利用爬虫框架来完成更高级、自动化的爬虫程序。

  此项目过程是运用requests请求库来获取html,再用正则表达式来解析从中获取所需数据。

话不多说,直接上代码,盘! (具体代码解释在代码旁边)

1.加载包,requests请求库,re是正则表达式的包,json是后面来把字典序列化的包;

#请求库:requests 解析工具:正则表达式
import requests
import re
import json
import time
2.用requests库通过url获取响应,得到html文本。
def get_one_page(url):
#头部的定义,自己在网页中可以获取(网页右击检查,network中的header)
headers={
'User-Agent':'ozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E5216a QQ/7.5.5.426 V1_IPH_SQ_7.5.5_1_APP_A Pixel/1080 Core/UIWebView Device/Apple(iPhone 8Plus) NetType/WIFI QBWebViewType/1'
}
response=requests.get(url,headers=headers)
if response.status_code==200: #只有status_code为200时才表示响应正确
return response.text
return None
3.用正则表达式从html中匹配出想要数据
def parse_one_page(html):
#re.compile是把正则化字符串对象化,方便复用。
pattern=re.compile('<li>.*?<em\sclass.*?>(.*?)</em>.*?<img.*? src="(.*?)".*?title">(.*?)<.*?<p class="">(.*?)</p>.*?rating_num.*?>(.*?)<.*?<span>(.*?)</span>.*?.*?inq">(.*?)<.*?</li>',re.S)
items=re.findall(pattern,html)
#列表形成字典(通过findall获取的数据是一条条记录,形成一个列表) for item in items:
yield{'index':item[0], #电影排名
'image':item[1], #电影海报
'title':item[2], #电影名称
'actor':item[3], #电影导演,主演
'score':item[4], #评分
'people_num':item[5], #多少人评价
'evaluate':item[6] #影评
}
4.把获得的数据存入到txt文件当中去

def write_to_file(content):
#创建或打开result.txt以追加的读写方式写入数据
with open('result.txt','a',encoding='utf-8') as f:
print(json.dumps(content,ensure_ascii=False)) #json.dumps()用于把字典序列化,方便写入txt文件
f.write(json.dumps(content,ensure_ascii=False)+'\n')
5.通过改变url中start的值来实现换页,进行下一页的切换。
def main(start):
#更换url中的start值来切换页面,具体更换的数值要更具实际情况而变
url='https://movie.douban.com/top250?start='+str(start)+'&filter='
html=get_one_page(url)
for item in parse_one_page(html):
write_to_file(item) if __name__=='__main__':
for i in range(10):
start=i*25
main(start)
time.sleep(1)#防止请求过快被网页检测出来,休眠1秒

  本文所有代码复制可以直接运行欧!

最新文章

  1. LoRaWAN协议(四)--入网方式概述
  2. HTML第一课总结
  3. 8.20 usaco
  4. td
  5. 使用IntelliLock加密授权你的.Net程序
  6. Running R jobs quickly on many machines(转)
  7. chrome浏览器iframe兼容性问题,隐藏起来再显示滚动条消失?
  8. Java-Enumeration总结
  9. markdown生成的a标签如何在新页面打开
  10. TCP/IP协议 数据链路层
  11. Python校验用户名是否合法示例
  12. ubuntu中可以ping通IP地址但是ping不通域名的问题(www.baidu.com)
  13. 洛谷P4383 林克卡特树
  14. Data Structure 基本概念
  15. gc调优我们到底在调整什么
  16. Open Credit System(UVA11078)
  17. 洛谷P2602 数字计数 [ZJOI2010] 数位dp
  18. java常用API之Date类
  19. SonarQube代码质量管理平台 的安装、配置与使用
  20. 【BIRT】报表数据导出为PDF显示不全

热门文章

  1. 设置TeeChart的提示文本
  2. 多线程并行计算数据总和 —— 优化计算思想(多线程去计算)—— C语言demo
  3. jquery改造轮播图1
  4. “全栈2019”Java异常第十一章:重写方法时只能抛出父类异常子集
  5. forword和重定向有什么区别?
  6. luoguP4647 [IOI2007] sails 船帆
  7. LOJ#6047. 「雅礼集训 2017 Day10」决斗(set)
  8. 洛谷P5280 [ZJOI2019]线段树(线段树)
  9. 记一次MBR锁机病毒分析
  10. [AIR] AS3操作文件时报SecurityError: fileWriteResource 错的解决方法