前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫:使用requests+re来爬取豆瓣图书

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

作者头像
龙哥
发布2018-10-22 14:15:17
1.5K0
发布2018-10-22 14:15:17
举报
文章被收录于专栏:Python绿色通道Python绿色通道

这两天在知识星球上有球友在使用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())
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档