Python爬虫:使用requests+re来爬取豆瓣图书

这两天在知识星球上有球友在使用requests+re来爬豆瓣图书的链接,书名及作者遇到了问题,虽然当时很快给他解决了,但由于我之前没有写这方面的文章,所以临时决定补一篇这样的文章。

首先需要说明的是,在数据抓取的时候,肯定是优先使用xpath,如果xpath不行再考虑正则或者bs4, 因为xpath简单且高效!

概念性的东西这里就不说了,我们直接来实战,这里只简单说明一下,详细的需要自己去查一下资料!

要爬取的图书内容:

爬取到的数据

. 可以匹配除换行符外的字符 re* 表示匹配0个或多个表达式 re?匹配0个或多个由前面正则表达式定义的片段,非贪婪模式,且只匹配前一个

  1. 首先我们需要完全抓取,所以我们要使用re.findall方法,又因为数据全部在<li class>中,需要只需要对这个里面数据处理
  2. 然后每一列来匹配 <li class> 因为还需要向后匹配查找,所以需要添加.*? 匹配一次,非贪婪模式. 等等匹配到cover下面的目录,我们可以匹配到href,获取再匹配标题,但alt包含标题,所以这里直接来提取alt="(.*?)",
  3. 接着需要提取数据出来这里使用(.*?) 把数据提出来,这里有多个数据需要提取,然后用数组呈现出来

完整代码

import requests
import re
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

url = 'https://book.douban.com/'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/55.0.2883.87 Safari/537.36'}
html = requests.get(url, headers=headers)
html.encoding = 'utf-8'
# 这里我只取了链接与标题
patter = re.compile('<li class.*?cover.*?href="(.*?)".*?alt="(.*?)".*?<p class="author".*?>(.*?)</p>', re.S)
titles = re.findall(patter, html.text)
for each in titles:
    print '书籍链接:{},书籍标题:{},---书籍作者:{}'.format(each[0], each[1],each[2].strip())

原文发布于微信公众号 - Python绿色通道(Future_coder)

原文发表时间:2018-03-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

Python从零基础到精通!小白也能学会!

引言 Functional Programming(函数式编程)的概念最早起源于LISP,由约翰·麦卡锡在1958年创立,最早提出了自动垃圾回收的理念,这一理念...

1995
来自专栏前端黑板报

Vue列表循环从指定下标开始

最近遇到一个问题,在循环商品列表时,因为数组的第一个是商品的品牌介绍,所以循环时不能直接循环,只能从第二个元素开始。

1.3K3
来自专栏精讲JAVA

Gof设计模式之静态工厂模式(五)

设计模式之静态工厂模式 01前言 该系列模式已经更新五篇,希望大家可以多看看以前的模式,并且从今天开始我打算换一种讲解方式,我不在贴出运行结果...

2026
来自专栏韩伟的专栏

面向对象的代码风格(上)

大家过年好呀!公众号从今天开始恢复更新,感谢大家不离不弃的关注。 今天的文末有投票,以助于我在新的一年里将公众号做得更好,踊跃参加一下吧! 本篇文章分两章发送,...

3998
来自专栏撸码那些事

【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重复的抽象

一种重要的抽象实现手法是创建内聚而完整的抽象。抽象未支持相关的方法时,可能会影响抽象的内聚性和完整性。如果抽象只支持部分相关的方法,其使用者就可能不得不自己去实...

1719
来自专栏炉边夜话

调查问卷:测试你对多核多线程的认知程度

        目前,多核多线程编程已经成为一种趋势,但大部分程序员还没有从串行程序的思维中走出来。即使有些人对多核多线程的概念有所了解,但也是一知半解,...

1322
来自专栏iOS 开发

iOS 代码使用 C++ 的 zero-cost abstraction 特性

1973
来自专栏C语言及其他语言

[每日一题]C语言程序设计教程(第三版)课后习题5.6

题目描述 给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60...

3185
来自专栏牛客网

阿里一面 京东一面+二面

3604
来自专栏人工智能LeadAI

python与数据科学应用

数据科学简介与应用 数据科学主要以统计学、机器学习、数据可视化以及(某一)领域知识为理论基础,其主要研究内容包括数据科学基础理论、数据预处理、数据计算和数据管...

3745

扫码关注云+社区

领取腾讯云代金券