python爬虫-豆瓣数据爬取-正则匹配

1.查看豆瓣网站的爬虫协议(robots.txt)

输入https://www.douban.com/robots.txt,显示如下:

 

User-agent: *
Disallow: /subject_search
Disallow: /amazon_search
Disallow: /search
Disallow: /group/search
Disallow: /event/search
Disallow: /celebrities/search
Disallow: /location/drama/search
Disallow: /forum/
Disallow: /new_subject
Disallow: /service/iframe
Disallow: /j/
Disallow: /link2/
Disallow: /recommend/
Disallow: /trailer/
Disallow: /doubanapp/card
Sitemap: https://www.douban.com/sitemap_index.xml
Sitemap: https://www.douban.com/sitemap_updated_index.xml
# Crawl-delay: 5

User-agent: Wandoujia Spider
Disallow: /

案例一:

 

# -*-coding:utf-8-*-

import requests
from bs4 import BeautifulSoup

#获取豆瓣图书某一页的短评
r=requests.get('https://book.douban.com/subject/27124852/comments/')#获取该书评的地址
soup=BeautifulSoup(r.text,'lxml')   #将该网页进行lxml解析,如果lxml报错,则表示没有安装lxml,pip install lxml即可
pattern=soup.find_all('p','comment-content')#获取p标签class属性为comment-content的字符集

for item in pattern:
    print item.string   #依次打印解析后的图书短评

元素获取方式:选中该书的短评,右键-检查,查看网页源代码:

运行结果:

 

张悦然写的很高级,这一点同龄人们中没几个能与之较量的。从故事到语言再到故事核(意识),三个层次,都能看到张关注的东西的新颖独特。张的短篇比长篇好。
评分虚高,很多逻辑和感情都不通,故事也没多大趣味。
喜欢这本书的朋友,你们认真的吗?行文粗糙而敷衍,内容苍白到几乎没法成文。难以想象的是,大段有气无力的描述来生硬的拼凑带着塑料味的都市故事……
中二时期一度迷恋张悦然的小说,那种痴迷就像璟对丛薇的仰望,这本小说集是近年来最具有曾经气息的,好像这十年白驹过隙,故事顿了顿再继续讲。……
不管生活给予我们怎样的逼仄,我们依然要执着的寻找生命的火光,向它而去。
a waste of time
最喜欢《大乔小乔》,喜欢姐姐的义无反顾,姐姐为了妹妹来这个家中有个合法的位置,付出了很多,最后姐姐也体会到自己在这个家中的责任与归属。
余华还是会说话,这本书他居然只评价了一句:这本书对人物的把握“准确”。“准确”不应该是作家及格线上的基本功吗?然而他紧跟着说道:“准确”……

 

案例二:

 

# -*-coding:utf-8-*-

import requests
import re

#获取该书的总评分
r=requests.get('https://book.douban.com/subject/27124852/comments/')#获取该书评的地址
pattern_s=re.compile('<span class="user-stars allstar(.*?) rating"')#使用正则匹配将评分设置为.*?
p=re.findall(pattern_s, r.text)
sum=0.0
i=0
for star in p:
    sum+=int(star)
    i=i+1
print '该书总分为%d'%sum
print '该书平均评分为%d'%(sum/i)

评分获取方式:将评分用正则匹配(.*?)表示

 

 


运行结果:

 

该书总分为720
该书平均评分为36

 

案例三:

 

# -*-coding:utf-8 -*-
import requests
import re

#豆瓣新书速递,使用正则匹配根据元素的属性值制定新书速递书名规则
r=requests.get('https://book.douban.com/latest?icn=index-latestbook-all')
pattern=re.compile('<div class="detail-frame">.*?\n.*?<h2>.*?\n.*?<a.*?>(.*?)<\/a>')#新书速递书名规则
t=re.findall(pattern, r.text)
  
n=0
for item in t:
    print item
    n=n+1
print '豆瓣新书速递:共%d本'%n

 

元素获取方式:图书链接处无任何属性值可使用,所以从上级的div元素往下找,中间不需要的元素用.*?替代即可,需要获取的元素用(.*?)表示

运行结果:

 

百年法
与绝迹之鸟的短暂邂逅
中国奇谭
利维坦之书
吃瓜时代的儿女们
水浒猎人
大象
奔月
陶潜和樱子
……

 

案例四:(模式同案例三)

 

# -*-coding:utf-8 -*-
import requests
import re

#豆瓣小组福田租房发布信息
r=requests.get("https://www.douban.com/group/futianzufang/")
pattern_top=re.compile('<td class="title">.*?\n.*?<span.*?>.*?\n.*?<img.*?>.*?\n.*?<\/span>.*?\n.*?<a.*?>(.*?)<\/a>')#置顶消息格式
t1=re.findall(pattern_top, r.text)
pattern=re.compile('<td class="title">.*?\n.*?<a.*?>(.*?)<\/a>')#非置顶消息格式
t2=re.findall(pattern, r.text)
n1=0
n2=0
for item1 in t1:
    print item1
    n1+=1
for item2 in t2:
    print item2
    n2+=1
print '福田最新租房消息:共%d条'%(n1+n2)

元素获取方式:从td标签开始定位,一直到需要获取的字段信息,同样,中间不需要的元素用.*?替代即可,需要获取的元素用(.*?)表示

 

 



运行结果:

 

车公庙下沙地铁口小区房,2400
【个人直租】福田CBD地铁花园小区精装次卧招租-限女生
福田下沙地铁口花园小区房出租
曝光竹园小区黑心无良房东
沙尾沙尾综合楼 合租 次卧 朝南北 精装修
转租:莲花西小区房单间 有独卫 地段非常好……
福田最新租房消息:共55条

 

案例五:(案例四中虽然可以获得想要的结果,但是使用的正则匹配方式过于复杂,稍微少一个字符就会找不到元素,这里换一种方式,使用html.parser,目前最好的html解析和分析的工具

 

# -*-coding:utf-8 -*-
import requests
import re
from bs4 import BeautifulSoup

#直接用正则表达式找出链接中包含https://www.douban.com/group/topic/的所有链接,即为发布的所有租房信息
r=requests.get("https://www.douban.com/group/futianzufang/")
# print r.text
soup=BeautifulSoup(r.text,'html.parser')
print '获取链接中包含https://www.douban.com/group/topic/的所有链接'
links=soup.find_all('a',href=re.compile(r"https://www.douban.com/group/topic/"))
n=0
for link in links:
    print link.name,link['href'],link.get_text()
    n+=1
print '共发布了%d条租房信息'%n

 

运行结果:

 

获取链接中包含https://www.douban.com/group/topic/的所有链接,即发布的所有租房信息
a https://www.douban.com/group/topic/100026326/ 车公庙下沙地铁口小区房,2400
a https://www.douban.com/group/topic/104274827/ 【个人直租】福田CBD地铁花园小区精装次卧招租-限女生
a https://www.douban.com/group/topic/100024039/ 福田下沙地铁口花园小区房出租
a https://www.douban.com/group/topic/103276050/ 曝光竹园小区黑心无良房东
a https://www.douban.com/group/topic/101584595/ 沙尾沙尾综合楼 合租 次卧 朝南北 精装修
a https://www.douban.com/group/topic/98614420/ 转租:莲花西小区房单间 有独卫 地段非常好……
共发布了55条租房信息

 

ps:使用正则匹配时,可以利用在线正则表达式测试工具,如http://tool.oschina.net/regex/,将需要爬取的页面源代码复制到待匹配文本的框中,然后写好你的正则匹配公式,点击测试匹配,如果能够匹配到你需要的信息,则表示你的公式无误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值