使用BeautifulSoup实现简单豆瓣爬虫

本文介绍了如何使用BeautifulSoup库来实现一个简单的豆瓣图书爬虫。通过讲解基础用法和进阶技巧,展示了如何获取网页内容并解析HTML,最终将数据保存到数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想做一个图书排行榜的一个web项目,基础框架也搭建完毕。但是在实现View的时候,发现了一个问题——坑爹啊 小哥我没数据啊 !!! 不过哥我也很机智,瞬间就有了两个方案:

1.搭好管理后台,然后自己手动录入数据。因为是想做一个图书排行,所以数据量不会太大,感觉还能接受(-_-P 后来看了下爬完之后的数据, 才发现哥太天真了!!!)

2.写个爬虫,偷个懒(切 , 懒惰的程序员才是优秀的程序员)

废话说的过多了,现在开始介绍BeautifulSoup(基础介绍抄袭为主,补充为辅哈~):

快速介绍
引用块内容
安装:
easy_install beautifulsoup4
pip install beautifulsoup4
其实我是这么装的:
apt-get install python-bs4

导入:
from bs4 import BeautifulSoup
如果直接install beautifulsoup4的话,卡在这块的童鞋比较多,所以我也只是其中一个而已

网上很多介绍(包括一些文档)都是从:

html_doc = ”’ ……………. ”’ #html文本
soup = BeautifulSoup(html_doc)

这么开始,文鱼忍不住吐个槽,与其费一大推劲,把html转成字符串变量还不是一直复制到编辑器里ctrl+f来的快了呢,所以应该是这么开始比较合理

import urllib2

r = urllib2.urlopen(‘http://item.jd.com/11715365.html‘)
contents = r.read()
soup = BeautifulSoup(contents, “html.parser”)

后边就是基本属性使用了:

输出soup对象中的第一个的a(其他div, p, h1什么都一样)标记
print soup.a

输出div下的第一的p(同上)
print soup.div.p

…………
(其实这么玩可以玩很久 知道最后一个节点(soup.div.p.a.img))

进阶部分:

(统一同上)
获取所有的a标签
soup.find_all(‘a’)
获取所有class为test的a标签
soup.find_all(‘a’, attrs={‘class’: ‘test’})
获取第一的class为test的a标签的 href和标签中的文本
a_tags = soup.find_all(‘a’, attrs={‘class’: ‘test’})

a_tags[0][‘href’]
a_tags_soup[0].text

其实有时需要把soup.find_all()取出的结果再做一次BeautifulSoup ,方便往下遍历,注意一定要先把soup.find_all()返回转换成str类

book_author_soup = soup.find_all(‘div’, attrs={‘id’: ‘p-author’})
book_author_soup = BeautifulSoup(str(book_author_soup), ‘html.parser’)
book_author = book_author_soup.a

说了这么多,发个干货,豆瓣和京东每周在 book.douban.com/book.jd.com上更新的图书爬取并保存到数据库

#!/usr/bin/env python
#-*-coding: utf-8-*-

import os,sys

reload(sys)
sys.setdefaultencoding("utf-8")

import urllib2
import re
import web
from bs4 import BeautifulSoup

class Crawler(object):
    def __init__(self, url):
        self.page = urllib2.urlopen(url)
        self.contents = self.page.read()
        self.soup = BeautifulSoup(self.contents, "html.parser")


class SaveBookInfo(object):
    def save_book(self, **kwargs):
        self.save_book_data(kwargs)

    #获取作者的外键
    #如果作者信息不存在则保存作者信息
    def get_author_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值