学习笔记:猫眼top100电影信息爬取
获取网页源码
用网上随便查的User-agent作为浏览器代理
try:
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
}
response = requests.get(url, headers=headers)
正则表达式解析
pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
+ '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
+ '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
- 括号用于在re.findall中获取所需信息,注意使用非贪心匹配 .*? 避免匹配过度导致信息缺失。
- yield函数:代替return,使得返回的数据更加整齐。
写入文件
json.dumps将字典转换为字符串。(补充:loads将字符串转换为字典)
跨页面爬取
观察到猫眼网站top界面每个页面只有10个电影信息,而翻页Url信息改变如下:
http://maoyan.com/board/4?
翻页->
http://maoyan.com/board/4?offset=10
也就是说,offset每加10控制页面向后跳转一面,利用这一规律进行爬取:
for i in range(10):
main(offset=i * 10)
print(str(i*10 + 1) + " to " + str(i*10 +10) + " got!")
time.sleep(1) #避免访问频次过高导致访问被限
虽然大部分是直接copy书上的实例,但还是满满的成就感!