爬取豆瓣TOP250 小练手项目

爬取豆瓣TOP250 小练手项目

为防止疫情期间片荒无聊 好吧,就是找个理由学爬虫

一个练手的爬虫项目 爬取的网页 https://movie.douban.com/top250

大概分为三步1.伪造浏览器发请求信息(urllib) 2.对返回的信息进行正则表达式提取(re) 3.用excel造表

主要难点在于对返回信息的提取

例子如下

一部电影的有用信息的爬取

源码:

from bs4 import BeautifulSoup       #它的作用是能够快速方便简单的提取网页中指定的内容,返回一个网页的									 #字符串,
                                    # 然后使用它的接口将网页字符串生成一个对象,然后通过这个对象的方法									  #来提取数据
import re                           #正则表达式
import urllib.request,urllib.error  #伪造请求欺骗浏览器 获取html文件
import xlwt                         #用excel造表的
import _sqlite3

#要用到的正则表达式
# 影片的连接
findlink = re.compile(r'<a href="(.*?)">')
# 影片图片的连接
findImgsrc = re.compile(r'<img.*src="(.*?)"',re.S)
# 影片的片名
findTitle = re.compile(r'<span class="title">(.*)</span>')
# 评分
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
# 评价人数
findjudgenum = re.compile(r'<span>(\d*)人评价</span>')
# 一句话评价
findInq = re.compile(r'<span class="inq">(.*)</span>')
# 相关内容
findBD = re.compile(r'<p class="">(.*?)</p>',re.S)


def main():
    url = "https://movie.douban.com/top250?start="
    datalist = getData(url)
    saveData(datalist)

#爬取网页
def getData(baseurl):
    datalist = []
    for i in range(0,10):
        url = baseurl + str(i*25)
        html = askURL(url)              #保存获取到的网页html
        soup = BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_= "item"):
            data=[]
            item = str(item)

            link = re.findall(findlink,item)[0]
            data.append(link)

            imgSrc = re.findall(findImgsrc,item)[0]
            data.append(imgSrc)

            title = re.findall(findTitle,item)
            if len(title) == 2 :
                ctitle = title[0]
                data.append(ctitle)
                otitle = title[1].replace('/','')
                data.append(otitle)
            else:
                data.append(title[0])
                data.append("    ")

            rate = re.findall(findRating,item)
            data.append(rate)

            judgenum = re.findall(findjudgenum,item)
            data.append(judgenum)

            Inq = re.findall(findInq,item)
            if len(Inq)!=0:
                Inq[0].replace('。',"")
                data.append(Inq)
            else:
                data.append(" ")

            bd=re.findall(findBD,item)[0]
            bd = re.sub('<br(\s+)?/>(\s+)'," ",bd)
            bd = re.sub('/'," ",bd)
            data.append(bd)


            datalist.append(data)
        for item in datalist:
            print(item)

    return datalist

# 得到指定一个url的网页内容
def askURL(url):
    head = {        #模拟浏览器服务信息
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.149Safari / 537.36"
    }   #欺骗服务器我们是什么类型浏览器,可以接受什么水平的文件内容   也可以填自己的 用户代理这块要小心点复制

    html = ""
    request = urllib.request.Request(url,headers=head)
    response = urllib.request.urlopen(request)
    html = response.read().decode("utf-8")
    # print(html)

    return html

#用excel保存数据
def saveData(datalist):
    print("saving")
    book = xlwt.Workbook(encoding='utf-8',style_compression=0)
    sheet = book.add_sheet('doubanTop250',cell_overwrite_ok=True)
    column = ('电影详情连接','图片链接','影片中文名','影片外国名','评分','评价数','概况','相关讯息')
    for i in range(0,8):
        sheet.write(0,i,column[i])
    for i in range(0,250):
        print("第%d条"%(i+1))
        data = datalist[i]
        for j in range(0,8):
            sheet.write(i+1,j,data[j])


    book.save('doubanTOP250.xls')
    return


if __name__ == "__main__":
    main()

最终成果部分展示
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值