1. 程式人生 > >python爬取豆瓣圖書

python爬取豆瓣圖書

最近突然想學下爬蟲爬取一下豆瓣的圖書,按類別來爬取並分別儲存,然後就用正則寫了一份初級爬蟲,目前只是分類的頁面爬取,後面完善一下,希望能夠得到每本書的isbn編號,生成自己的資料庫。

# -*- coding:utf-8 -*-
import urllib2
import re
import sys

tags = [u'小說', u'散文', u'歷史', u'愛情', u'管理', u'程式設計', u'生活', u'心理']
haveBooked = set()


class BookSpider:
    def __init__(self):
        reload(sys)
        sys.setdefaultencoding('utf-8')
        self.start = 0
        self.tagIndex = 0
        self.param = '&filter=&type='
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}
        self.filePath = 'DoubanTop250.txt'

    def GetPage(self):
        try:
            URL = 'https://book.douban.com/tag/' + tags[self.tagIndex]
            request = urllib2.Request(url=URL, headers=self.headers)
            response = urllib2.urlopen(request)
            page = response.read().decode('utf-8')
            self.start += 20
            pageNum = self.start / 20
            print '正在抓取 ' + tags[self.tagIndex] + ' 的第' + str(pageNum) + '頁資料'
            return page
        except urllib2.URLError, e:
            if hasattr(e, 'reason'):
                print '抓取失敗,具體原因:', e.reason

    def WriteBookTitle(self, titleInfo, fileBook):
        patternTitle = re.compile(u'(.*?)<span.*?>(.*?)</span>.*?', re.S)
        result = re.match(patternTitle, titleInfo)
        if result is None:
            fileBook.write('title: ' + titleInfo + '\r\n')
        else:
            titles = re.findall(patternTitle, titleInfo)
            fileBook.write('title: ' + titles[0][0].strip() + titles[0][1].strip() + '\r\n')

    def WriteBookPubInfo(self, pubInfo, fileBook):
        pubInfo += '!'
        patternPub1 = re.compile(u'(.*?)/(.*?)/(.*?)/(.*?)/(.*?)!', re.S)
        patternPub2 = re.compile(u'(.*?)/(.*?)/(.*?)/(.*?)!', re.S)
        result = re.match(patternPub1, pubInfo)
        if result is None:
            pubs = re.findall(patternPub2, pubInfo)
            fileBook.write('author: ' + pubs[0][0].strip() + '\r\n')
            fileBook.write('pubHouse: ' + pubs[0][1].strip() + '\r\n')
            fileBook.write('pubData: ' + pubs[0][2].strip() + '\r\n')
            fileBook.write('price: ' + pubs[0][3].strip() + '\r\n\r\n')
        else:
            pubs = re.findall(patternPub1, pubInfo)
            fileBook.write('author: ' + pubs[0][0].strip() + '\r\n')
            fileBook.write('translator: ' + pubs[0][1].strip() + '\r\n')
            fileBook.write('pubHouse: ' + pubs[0][2].strip() + '\r\n')
            fileBook.write('pubData: ' + pubs[0][3].strip() + '\r\n')
            fileBook.write('price: ' + pubs[0][4].strip() + '\r\n\r\n')

    def GetBook(self):
    	pattern = re.compile(u'<li.*?class="subject-item">.*?<div.*?class="info">.*?'
            + u'<h2.*?class="">.*?<a.*?subject_id:\'(.*?)\'.*?>(.*?)</a>.*?<div.*?class="pub">'
            + u'(.*?)</div>', re.S)
        try:
            while self.tagIndex < 2:
                fileName = "book" + tags[self.tagIndex] + ".txt"
                fileName.decode("utf-8").encode("gb2312")
                print fileName
                fileBook = open(fileName, 'w')
                while self.start < 1:
                    page = self.GetPage()
                    books = re.findall(pattern, page)
                    for book in books:
                        fileBook.write('subject_id: ' + book[0].strip() + '\r\n')
                        self.WriteBookTitle(book[1].strip(), fileBook)
                        self.WriteBookPubInfo(book[2].strip(), fileBook)
                    self.start += 1
                fileBook.close()
                self.start = 0
                self.tagIndex += 1
        except:
            print '抓取 ' + tags[self.tagIndex] + ' 第 ' + self.start / 20 + 1 + ' 頁失敗'

    def main(self):
        print '開始抓取圖書資料'
        self.GetBook()
        print '抓取完畢...'

DoubanSpoder = BookSpider()
DoubanSpoder.main()


相關推薦

教你用Python豆瓣圖書Top250

質量、速度、廉價,選擇其中兩個 這篇文章將會用到上一篇文章所講的內容,如果沒有看過可以去看一下教你用Python寫excel 今天我們要做的就是用Python爬取豆瓣圖書Top250,先開啟網站看一下 今天不談這豆瓣圖書top250垃圾不垃圾的問題,只看看怎麼用p

python豆瓣圖書

最近突然想學下爬蟲爬取一下豆瓣的圖書,按類別來爬取並分別儲存,然後就用正則寫了一份初級爬蟲,目前只是分類的頁面爬取,後面完善一下,希望能夠得到每本書的isbn編號,生成自己的資料庫。 # -*- coding:utf-8 -*- import urllib2 import

Python豆瓣TOP250圖書排行榜

# -*- coding: utf-8 -*- import bs4 import requests def open_url(url): # url = 'https://movie.douban.com/top250' hd = {}

python正則表示式豆瓣圖書資訊

import requests import re content = requests.get('https://book.douban.com/').text pattern = re.compile('<li.*?cover.*?href="(.*?)".*?ti

python 爬蟲實戰(一)豆瓣圖書top250

import requests from lxml import etree with open('booktop250.txt','w',encoding='utf-8') as f: f

python豆瓣小組700+話題加回復啦啦啦python open file with a variable name

技術分享 ash 寫入 blog ima ron tar 回復 -128 需求:爬取豆瓣小組所有話題(話題title,內容,作者,發布時間),及回復(最佳回復,普通回復,回復_回復,翻頁回復,0回復) 解決:1. 先爬取小組下,所有的主題鏈接,通過定位nextp

python豆瓣250存入mongodb全紀錄

xpath author cli content call function 取出 pycha 出版社 用了一周的時間總算搞定了,跨過了各種坑,總算調試成功了,記錄如下: 1、首先在cmd中用命令行建立douban爬蟲項目 scrapy startproject douba

爬蟲-豆瓣圖書TOP250

info spa data inf code pla select lac lec import requests from bs4 import BeautifulSoup def get_book(url): wb_data = requests.get(u

python 豆瓣電影案例

數據 odin span content html temp com str self # conding=utf-8 from parse import parse_url import json class DoubanSpider: def __init

用Requests和正則表示式豆瓣圖書TOP250

思路和上文大同小異。 import requests from requests.exceptions import RequestException import re import json headers = {'User-Agent':'Mozilla/5.0(Macinto

python3豆瓣圖書Top250圖片

本部落格只爬取豆瓣圖書Top250的圖片,各位愛書的小夥伴趕緊學起來,爬完的效果圖如下: 我這段程式碼的目錄結構如下: 程式碼在此: # -*- coding:utf-8 -*- import requests from lxml import etree def spid

爬蟲之豆瓣圖書的評論

pen 數據 app bs4 lis 爬取 fix replace sub from urllib import request from bs4 import BeautifulSoup as bs #爬取豆瓣最受關註圖書榜 resp = request.urlope

爬蟲之豆瓣圖書名字及ID

for gettext char small print html_ 圖書 res span from urllib import request from bs4 import BeautifulSoup as bs #爬取豆瓣最受關註圖書榜 resp = reque

詳解使用Python豆瓣短評並繪製詞雲

使用Python爬取豆瓣短評並繪製詞雲 成果如下(比較醜,湊合看) 1.分析網頁 開啟想要爬取的電影,比如《找到你》,其短評如下: 檢視原始碼 發現短評存放在<span>標籤裡 並且class為short,所以通過爬取其裡邊的內容即可

python豆瓣電影Top250的資訊

python爬取豆瓣電影Top250的資訊 2018年07月25日 20:03:14 呢喃無音 閱讀數:50 python爬取豆瓣電影Top250的資訊。 初學,所以程式碼的不夠美觀和精煉。 如果程式碼有錯,請各位讀者在評論區評論,以免誤導其他同學。 (

Python3 豆瓣圖書Top250並存入Excel中

#coding=utf-8 import re import xlwt import requests from bs4 import BeautifulSoup def getHtml(url): headers = {'User-Agent': 'Mo

python 豆瓣網 搜尋結果 同城活動 資料

主要使用的庫: requests:爬蟲請求並獲取原始碼 re:使用正則表示式提取資料 json:使用JSON提取資料 pandas:使用pandans儲存資料 bs4:網頁程式碼解析 以下是原始碼: #!coding=utf-8 import requests

python豆瓣影評

看的別人的程式碼 爬取某部影片的影評 沒有模擬登入只能爬6頁 # -*- encoding:utf-8 -*- import requests from bs4 import BeautifulSoup import re import random import io

Python 豆瓣

... import urllib.request import time from bs4 import BeautifulSoup def url_open(url): response = urllib.request.urlopen(url) return response

[轉載]Python豆瓣影評並生成詞雲圖程式碼

# -*- coding:utf-8 -*- ''' 抓取豆瓣電影某部電影的評論 這裡以《我不是潘金蓮為例》 網址連結:https://movie.douban.com/subject/26630781/comments 為了抓取全部評論需要先進行登入 '''