python3 [入门基础实战] 爬虫入门之爬取豆瓣读书随笔页面

话不多说,先上今晚的代码


# encoding=utf8
import requests
import re
from bs4 import BeautifulSoup

# 此处是爬去豆瓣读书的随笔页面
# page=0
# doubarurl = 'https://book.douban.com/tag/%E9%9A%8F%E7%AC%94?start='+str(page)+'&type=T'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400'
    ,
    'Cookie': 'bid=I0klBiKF3nQ; ll="118277"; ap=1; gr_user_id=ffdf2f63-ec37-49b5-99e8-0e0d28741172; _pk_ref.100001.3ac3=%5B%22%22%2C%22%22%2C1498223948%2C%22https%3A%2F%2Fwww.douban.com%2F%22%5D; _vwo_uuid_v2=8C5B24903B1D1D3886FE478B91C5DE97|7eac18658e7fecbbf3798b88cfcf6113; gr_session_id_22c937bbd8ebd703f2d8e9445f7dfd03=9c102dec-1bbc-4abe-ba94-298c209e7fc5; gr_cs1_9c102dec-1bbc-4abe-ba94-298c209e7fc5=user_id%3A0; _pk_id.100001.3ac3=957aa3bc98093993.1498223948.1.1498224184.1498223948.; _pk_ses.100001.3ac3=*'
    ,
}


def getDouBanHtml(url):
    print('url ===   '+url)
    req = requests.get(url, headers)
    html = req.text
    return html

def parseDouBanHtml(html):
    # print(html)
    soup = BeautifulSoup(html, 'lxml')
    # 标题
    main_title_list = soup.findAll('ul',{'class':'subject-list'})
    title = soup.findAll('a',attrs={'title':True})

    # 出版社
    address = soup.findAll('div',{'class':'pub'})
    for adress in address:
        print(str(adress.string).strip())
        print('==='*40)

    # 评价
    recomends = soup.findAll('span',{'class':'p1'})
    for recomend in recomends:
        print(str(recomend.string).strip())
        print('---'*40)

    # 介绍
    details = soup.findAll('p')
    for detail in details:
        print(str(detail.string).strip())
        print('^^^^'*40)
    # print(title)
    for item in title:
        print(str(item.string).strip())
        print("*"*40)
    # for title in main_title_list:
        # print(title)
    # print(main_title_list)
# 叠加
def diejia(n):
    if n == 0:
        return 0
    else:
        return (n-1)*20
print(diejia(0))
# data = getDouBanHtml(doubarurl)
# print(data)
# parseDouBanHtml(data)

for i in range(0,95):
    index = diejia(i)
    print('i   '+str(i)+'     pageIndex     '+str(index))
    doubarurl = 'https://book.douban.com/tag/%E9%9A%8F%E7%AC%94?start=' + str(index) + '&type=T'
    print('doubarurl    '+doubarurl)
    data = getDouBanHtml(doubarurl)
    parseDouBanHtml(data)






不错,今晚爬的就是豆瓣的读书随笔页面


说下思路吧:

一开始先把url考过来,然后进行对比,发现

https://book.douban.com/tag/%E9%9A%8F%E7%AC%94?start=20&type=T


每次变化都是start= 后的数字变化的, 现在我们就暂且爬取一页的数据,

用的还是上一次用的requests和bs4 下的 beautifulsoup


困扰很久的是title标签的获取,暂时上传不了图片,就先这样解释一下:
因为title是一个attr,不是一个tag,这个我也是不是大懂,边百度边进行调试的,

title = soup.findAll('a',attrs={'title':True})

这里说的是如果不知道title是什么value 就直接设置为true,这样爬取的就是title下的内容了


还有一个就是 爬完后,得到的并不是标题,而是标题连接一些其他的标签一块给爬出来了。此时我们就用title.string方法得到它的字符串内容,这样就可爬出来

注意一点的是:

每次其他类型转string类型都转不了,我们可以用str(xxx) 或者”“.join(xxx)方法转为string,这种视情况而定。


可能主要还是beautifulsoup 这个库用不熟,本来也不是很熟,这是我第二次爬出来比较简陋的一些数据, 不过比第一次的多了一些

整体思路:

先把整个网页爬取下来,再进行某个字段的爬取,然后进行其他字段的爬取,最后多页进行爬取,这里借鉴了下大才哥的beautifulsoup,确实很详细

存在的缺陷:

爬取的标签还参合着其他东西,例如最后一个p标签爬取内容简介的东西,

爬取下来的留有较大的空格暂时不知道怎么除掉

没有进行文件的存储


总体过程还算是比较好的,虽然豆瓣上显示有那么多,但是实际上豆瓣并没有那么多页数,一共也就50 页, 尴尬ing。。今晚就差不多这样结束吧。工作压力也是挺大的,干活的跟说话的想法确实不一样。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值