码迷,mamicode.com
首页 > 其他好文 > 详细

爬取豆瓣网图书TOP250的信息

时间:2019-12-31 21:29:40      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:==   web   stat   os x   javascrip   with open   请求   with   com   

爬取豆瓣网图书TOP250的信息,需要爬取的信息包括:书名、书本的链接、作者、出版社和出版时间、书本的价格、评分和评价,并把爬取到的数据存储到本地文件中。

参考网址:https://book.douban.com/top250

注意:使用正则表达式时,不要在Elements选项卡中直接查看源代码,因为那的源码可能经过Javascript渲染而与原始请求不同,而是需要从Network选项卡中查看源码。

import re
import json
import time
import requests
#from requests.exceptions import RequestException


def get_one_page(url):
    try:
        headers = {
            User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) 
            + AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36
        }
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None
    
    
def parse_one_page(html, start):
    #.*? 非贪婪匹配
    items1 = re.findall(href="(.*?)".*?title="(.*?)".*?, html)
    items2 = re.findall(pl">(.*?\/)?(.*?\/)?(.*?)\/(.*?)\/(.*?)<\/p>, html)#()?有的书没写作者
    items3 = re.findall(nums">(.*?)<\/span>.*?<\/div>(.*?)?<\/td>, html, re.S)#有的书没写书评
    #re.S使.匹配包括换行在内的所有字符
    for i in range(25):
        yield{
            page: start//25+1,
            ranking: start+i+1,
            book: items1[i][1],
            link: items1[i][0],
            
            author: items2[i][0].replace(/, ‘‘).strip(),
            press: items2[i][2].strip(),
            time: items2[i][3].strip(),
            price: items2[i][4].strip(),
            
            grade: items3[i][0],
            #有书评的则要去除两边的源码
            evaluation: items3[i][1].strip().replace("</span>\n              </p>", ‘‘)            .replace(<p class="quote" style="margin: 10px 0; color: #666">\n                  <span class="inq">, ‘‘) 
        }

def write_to_file(content):
    with open(doubanBookTop250.txt, a, encoding=utf-8) as f:
        f.write(json.dumps(content, ensure_ascii=False) + \n)


def main(start):
    url = https://book.douban.com/top250?start= + str(start)
    html = get_one_page(url)
    for item in parse_one_page(html, start):
        #print(‘-------‘)
        print(item)
        #write_to_file(item)


if __name__ == __main__:
    for i in range(10):
        main(start=i * 25)
        time.sleep(1)

爬取豆瓣网图书TOP250的信息

标签:==   web   stat   os x   javascrip   with open   请求   with   com   

原文地址:https://www.cnblogs.com/oeong/p/12127477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!