爬取豆瓣金融类图书信息(仅分析自用)

第一步:寻找网址规律

首先来展示一下原网页:第一页
第二页
可以看出网页地址有规律,start=0,start=20,start=40(是这样的规律,这部分只展示两页)。这样就可以获取所有的网页地址。

第二步,爬取网页信息

这里只爬取前20页信息

urls=['https://book.douban.com/tag/金融?start='+str(i*20)for i in range(0,20)]#爬取多个页面
for url in urls:
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
      }
    req=requests.get(url,headers=headers)
    req.encoding='utf-8'
    html=req.text

这样就依次获取了网页的信息。

第三步:利用解析器取到想要取的内容

解析器我们使用Beautiful Soup(使用CSS选择器):
提取名称,出版信息,评分,评价数和简介

soup=BeautifulSoup(html,'lxml')
    titles=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    infos=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    scores=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    nums=  ['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    comments=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    i=0
    for a in soup.select('h2 a'):
        title=a['title']
        titles[i]=title
        i=i+1
    i=0
    
    for pub in soup.select('div.pub'):
        info=pub.string
        infos[i]=info
        i=i+1
        
    i=0
    for num in soup.select('span.rating_nums'):
        score=num.string
        scores[i]=score
        for j in range(0,len(scores)):
            if scores[j] ==None:
                scores[j]='null'
        i=i+1
    i=0
    for pl in soup.select('span.pl'):
        num=pl.string
        nums[i]=num
        i=i+1

    i=0
    for comment in soup.select('.info p'):
        comment=comment.string
        comments[i]=comment
        i=i+1

后续有写beautifulsoup专题,在此处不多做解释。
了解BeautifulSoup专题请点这里
解释一下我为什么写了这么复杂的一段代码:
在beautifulsoup直接取数时,一些简介中会没有信息,遇到这种情况的时候,就会有串行问题的出现,因此,在这里先定义好字符串,如果为 空值,那一行即写为’null‘,不会再有空值的出现。若有更好的办法,望留言,十分感谢。(我这里的i循环也写的复杂,望指正)。

第四步:写入csv

  for k in range(0,20):
        text='$'.join((titles[k],infos[k],scores[k],nums[k],comments[k]))+'\n'
        text=text.replace('\n', '')
 with open('C:/Users/asus/Desktop/python实践周/book.csv','a',encoding='utf-8') as f:
            f.write(text+'\n')

全部代码:

urls=['https://book.douban.com/tag/金融?start='+str(i*20)for i in range(0,20)]#爬取多个页面
for url in urls:
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
      }
    req=requests.get(url,headers=headers)
    req.encoding='utf-8'
    html=req.text
    soup=BeautifulSoup(html,'lxml')
    titles=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    infos=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    scores=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    nums=  ['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    comments=['null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null','null']
    i=0
    for a in soup.select('h2 a'):
        title=a['title']
        titles[i]=title
        i=i+1
    i=0
    
    for pub in soup.select('div.pub'):
        info=pub.string
        infos[i]=info
        i=i+1
        
    i=0
    for num in soup.select('span.rating_nums'):
        score=num.string
        scores[i]=score
        for j in range(0,len(scores)):
            if scores[j] ==None:
                scores[j]='null'
        i=i+1
    i=0
    for pl in soup.select('span.pl'):
        num=pl.string
        nums[i]=num
        i=i+1

    i=0
    for comment in soup.select('.info p'):
        comment=comment.string
        comments[i]=comment
        i=i+1
    for k in range(0,20):
        text='$'.join((titles[k],infos[k],scores[k],nums[k],comments[k]))+'\n'
        text=text.replace('\n', '')
        with open('C:/Users/asus/Desktop/python实践周/book.csv','a',encoding='utf-8') as f:
            f.write(text+'\n')

爬取内容展示:

再利用EXCEL数据分列就可以啦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值