php抓取网页title(本节使用Python爬虫抓取猫眼(电影网排行榜)影片信息)
优采云 发布时间: 2021-10-12 05:38php抓取网页title(本节使用Python爬虫抓取猫眼(电影网排行榜)影片信息)
本节使用Python爬虫抓取猫眼电影TOP100榜单()电影信息,包括电影名称、上映时间、主演信息。
在开始编写程序之前,首先确定页面类型(静态页面或动态页面),其次找出页面的url规则,最后通过分析网页元素的结构来确定正则表达式,从而提取网页信息。
确定页面类型
右击查看页面源码,判断页面中是否存在要抓取的数据。通过浏览可知,所有要抓取的信息都存在于源代码中,因此页面输入为静态页面。如下:
<p class="name">
我不是药神
主演:徐峥,周一围,王传君
</p>
发布时间:2018-07-05
确定url规则
确定url规则,需要多浏览几页,才能总结url规则,如下图:
第一页:
第二页:
第三页:
…
第 n 页:(n-1)*10
确定正则表达式
通过分析网页元素的结构来确定正则表达式,如下图:
<p class="name">我不是药神
主演:徐峥,周一围,王传君
</p>
发布时间:2018-07-05
使用 Chrome Developer Debugging Tools 确定要捕获的元素的结构。这样做的原因是可以避免正则表达式的冗余,提高编写正则表达式的速度。正则表达式如下:
.*?title="(.*?)".*?class="star">(.*?).*?releasetime">(.*?)
编写正则表达式时,使用(.*?)替换需要提取的信息,使用.*? 替换不需要的内容(包括元素标签)。
编写爬虫
下面用面向对象的方法写一个爬虫程序,主要写了四个函数,分别是请求函数、分析函数、数据保存函数、主函数。最后,如果你的时间不是很紧,想快速提高,最重要的是你不怕吃苦。我建议你可以定价@762459510。那真的很好。很多人都在快速进步。你需要害怕困难!可以去加进去看看~
1. from urllib import request
2. import re
3. import time
4. import random
5. import csv
6. from ua_info import ua_list
7. # 定义一个爬虫类
8. class MaoyanSpider(object):
9. # 初始化
10. # 定义初始页面url
11. def __init__(self):
12. self.url = 'https://maoyan.com/board/4?offset={}'
13. # 请求函数
14. def get_html(self,url):
15. headers = {'User-Agent':random.choice(ua_list)}
16. req = request.Request(url=url,headers=headers)
17. res = request.urlopen(req)
18. html = res.read().decode()
19. # 直接调用解析函数
20. self.parse_html(html)
21. # 解析函数
22. def parse_html(self,html):
23. # 正则表达式
24. re_bds = '.*?title="(.*?)".*?<p class="star">(.*?)
25. .*?class="releasetime">(.*?)</p>'
26. # 生成正则表达式对象
27. pattern = re.compile(re_bds,re.S)
28. # r_list: [('我不是药神','徐峥,周一围,王传君','2018-07-05'),...] 列表元组
29. r_list = pattern.findall(html)
30. self.save_html(r_list)
31. # 保存数据函数,使用python内置csv模块
32. def save_html(self,r_list):
33. #生成文件对象
34. with open('maoyan.csv','a',newline='',encoding="utf-8") as f:
35. #生成csv操作对象
36. writer = csv.writer(f)
37. #整理数据
38. for r in r_list:
39. name = r[0].strip()
40. star = r[1].strip()[3:]
41. # 上映时间:2018-07-05
42. # 切片截取时间
43. time = r[2].strip()[5:15]
44. L = [name,star,time]
45. # 写入csv文件
46. writer.writerow(L)
47. print(name,time,star)
48. # 主函数
49. def run(self):
50. #抓取第一页数据
51. for offset in range(0,11,10):
52. url = self.url.format(offset)
53. self.get_html(url)
54. #生成1-2之间的浮点数
55. time.sleep(random.uniform(1,2))
56. # 以脚本方式启动
57. if __name__ == '__main__':
58. #捕捉异常错误
59. try:
60. spider = MaoyanSpider()
61. spider.run()
62. except Exception as e:
63. print("错误:",e)
</p>
输出结果:
我不是药神 2018-07-05 徐峥、周以伟、王传君
肖申克的救赎 1994-09-10 蒂姆·罗宾斯、摩根·弗里曼、鲍勃·冈顿
绿皮书 2019-03-01 Vigo Mortensen, Mahsala Ali, Linda Cardrini
海上钢琴家 2019-11-15 蒂姆·罗斯、比尔·纳恩、克兰伦斯·威廉姆斯三世
小偷家族 2018-08-03 中川雅也、安藤樱、松冈墨鱼
霸王别姬 1993-07-26 张国荣、张凤仪、巩俐
哪吒魔童降临人间
美丽人生 2020-01-03 罗伯托·贝尼尼、朱斯蒂诺·杜拉诺、塞尔吉奥·比尼·巴斯特里克
这个杀手不太冷 1994-09-14 让·雷诺、加里·奥德曼、娜塔莉·波特曼
2010-09-01 莱昂纳多·迪卡普里奥、渡边谦、约瑟夫·高登-莱维特