学习爬虫lesson3

今天学习了如何爬取豆瓣电影top250的数据

import requests  #通过requests相关功能获得页面源代码
import re   #通过re来提取页面中的有效信息
import csv #存数据到文件里

url = 'https://movie.douban.com/top250'
Headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/12"
}
resp = requests.get(url,headers=Headers)
#print(resp.text) #可以先打印出来看一下源代码,什么都没有显示说明有反爬,要增加headers
page_content = resp.text
#加下来就要从这个页面中解析想要的数据
obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?'
                 r'<p class="">.*?<br>(?P<year>.*?)&nbsp'
                 r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>',re.S)
#通过查看页面源代码写出正则表达式,需要获取的东西就再另外括起来,避免太长无关内容就.*?惰性匹配过掉
result = obj.finditer(page_content) #得到的结果放到result里
for it in result:
    print(it.group("name"))
    print(it.group("score"))
    print(it.group("year").strip()) #为了结果的输出看起来更美观

运行结果:
在这里插入图片描述

补充防止自己忘记,写正则化的时候查看页面源代码,找到页码中所需数据的位置,根据前后的标记写出正则化,比如此例中页面是这样:(黑色是要获得的数据,红色是关键前后标记)
在这里插入图片描述
为了能够把得到的数据方便后期处理,可以把数据放到一个文件中去

import requests  #通过requests相关功能获得页面源代码
import re   #通过re来提取页面中的有效信息
import csv #存数据到文件里

url = 'https://movie.douban.com/top250'
Headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.12151 SLBChan/12"
}
resp = requests.get(url,headers=Headers)
#print(resp.text) #可以先打印出来看一下源代码,什么都没有显示说明有反爬,要增加headers
page_content = resp.text
#加下来就要从这个页面中解析想要的数据
obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?'
                 r'<p class="">.*?<br>(?P<year>.*?)&nbsp'
                 r'.*?<span class="rating_num" property="v:average">(?P<score>.*?)</span>',re.S)
#通过查看页面源代码写出正则表达式,需要获取的东西就再另外括起来,避免太长无关内容就.*?惰性匹配过掉
result = obj.finditer(page_content) #得到的结果放到result里
f = open("data.csv",mode="w",encoding="utf-8") #准备一个文件
csvwriter = csv.writer(f)
for it in result:
    '''
    print(it.group("name"))
    #print(it.group("score"))
    #print(it.group("year").strip()) #为了结果的输出看起来更美观
    '''
    dic = it.groupdict() #把name,score,year整理成字典的形式
    dic['year'] = dic['year'].strip() #为了美观还是把year部分单独处理
    csvwriter.writerow(dic.values())

f.close() #有关就有开

运行后就会有一个文件,look!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值