爬取豆瓣网图书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(item)
#write_to_file(item) if __name__ == '__main__':
for i in range(10):
main(start=i * 25)
time.sleep(1)

爬取豆瓣网图书TOP250的信息的更多相关文章

  1. 爬取豆瓣电影排行top250

    功能描述V1.0: 爬取豆瓣电影排行top250 功能分析: 使用的库 1.time 2.json 3.requests 4.BuautifulSoup 5.RequestException 上机实验 ...

  2. Scrapy爬虫(5)爬取当当网图书畅销榜

      本次将会使用Scrapy来爬取当当网的图书畅销榜,其网页截图如下:   我们的爬虫将会把每本书的排名,书名,作者,出版社,价格以及评论数爬取出来,并保存为csv格式的文件.项目的具体创建就不再多讲 ...

  3. Python进阶练习与爬取豆瓣T250的影片相关信息

    (一)Python进阶练习 正所谓要将知识进行实践,才会真正的掌握 于是就练习了几道题:求素数,求奇数,求九九乘法表,字符串练习 import re #求素数 i=1; flag=0 while(i& ...

  4. Python3爬取豆瓣网电影信息

      # -*- coding:utf-8 -*- """ 一个简单的Python爬虫, 用于抓取豆瓣电影Top前250的电影的名称 Language: Python3.6 ...

  5. python3爬取豆瓣排名前250电影信息

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @File : doubanmovie.py # @Author: Anthony.waa # @Dat ...

  6. 简单python爬虫案例(爬取慕课网全部实战课程信息)

    技术选型 下载器是Requests 解析使用的是正则表达式 效果图: 准备好各个包 # -*- coding: utf-8 -*- import requests #第三方下载器 import re ...

  7. 正则表达式_爬取豆瓣电影排行Top250

    前言: 利用简单的正则表达式,获取响应内容爬取数据. Part1 正则表达式(Regular Expression) 1.1 简介 正则表达式,又称规则表达式,它是一种文本模式,就是通过事先定义好的一 ...

  8. 实例学习——爬取豆瓣网TOP250数据

    开发环境:(Windows)eclipse+pydev 网址:https://book.douban.com/top250?start=0 from lxml import etree #解析提取数据 ...

  9. scrapy 爬取豆瓣互联网图书

    安装scrapy conda install scrapy 生成一个scrapy项目 scrapy startproject douban settings文件 # -*- coding: utf-8 ...

随机推荐

  1. Activity工作流框架入门(二)API使用DEMO

    工作流API使用Demo package activity.demo.test; import java.io.File; import java.io.FileInputStream; import ...

  2. 20190710双人开黑CF模拟赛

    Codeforces Round #571 (Div. 2) 日常被tanao_大佬带飞,我AC了A和C(B题没了...否则tanao_大佬肯定把我吊打) A. Vus the Cossack and ...

  3. 你都这么拼了,面试官TM怎么还是无动于衷

    面试,对于每个人而然并不陌生,可以说是必须经历的一个过程了,小到一场考试,大到企业面试,甚至大型选秀...... 有时自己明明很努力了,但偏偏会在面试环节出了插曲,比如,紧张就是最容易出现的了. 我相 ...

  4. Go语言实现:【剑指offer】丑数

    该题目来源于牛客网<剑指offer>专题. 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7.习惯上我们把1当做是第一个丑 ...

  5. 【题解】P3373 【模板】线段树 2

    线段树解法 好丢脸,这个题做了一下午,调试了三个多小时...... 先讲讲解题思路 既然这里是线段树,就要用到lazy-tag.又有加法又有乘法的话,就要用到两个lazy-tag,分别用数组jia[] ...

  6. 2020-02-19Linux学习日记,第一天

    今天是2020-02-19第一次写博客.每天更新学习Linux的一些笔记. 主要是为了方便日后自己复习,也是为了督促自己学习.记录自己的学习轨迹! -------------------------- ...

  7. NR / 5G - The Proportional Fair algorithm

  8. 本地linux搭建的WordPress升级时需要输入FTP信息

    转自:https://blog.csdn.net/weixin_43837883/article/details/88751871 这是因为目录权限不正确所致 解决方法: 1.使用命令chown -R ...

  9. .NET Core之单元测试(一):入门

    目录 什么是单元测试 .NET Core中的测试框架 一个最基础的单元测试 我们再看看上面的代码 什么是单元测试 单元测试是对软件中的最小可测试单元进行检查和验证.对于单元测试,要保证测试粒度足够小, ...

  10. css 纯css自适应页面 示例

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...