最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.
这两天有读者要我出一篇使用正则表达式来抓取数据,于是这篇献上
首先需要说明的是,在数据抓取的时候,优先使用xpath,如果xpath不行再考虑正则或者bs4, 因为xpath简单且高效!
概念性的东西这里就不说了,我们直接来实战,这里只简单说明一下,详细的需要自己去查一下资料!
要爬取的图书内容:
爬取到的数据
. 可以匹配除换行符外的字符 re* 表示匹配0个或多个表达式 re?匹配0个或多个由前面正则表达式定义的片段,非贪婪模式,且只匹配前一个
re.findall
方法,又因为数据全部在<li class>
中,需要只需要对这个里面数据处理<li class>
因为还需要向后匹配查找,所以需要添加.*?
匹配一次,非贪婪模式. 等等匹配到cover
下面的目录,我们可以匹配到href
,获取再匹配标题,但alt
包含标题,所以这里直接来提取alt="(.*?)"
,(.*?)
把数据提出来,这里有多个数据需要提取,然后用数组呈现出来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())