欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-02 17:45:45
...

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


# 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。。今晚就差不多这样结束吧。工作压力也是挺大的,干活的跟说话的想法确实不一样。

相关标签: python 豆瓣