scrapy学习笔记(五)
面对实际问题中的问题,用智慧解决。
这篇讲一个python调用scrapy执行爬虫,并用正则表达式方法提取JS信息的实际任务。
A任务:定时爬取panda.tv的某个房间数据并输出文本出结果
分析网页目标:要提取的num信息存在于JS中因此无法用xpath提取到有效内容,这里用正则表达式完成任务
![](https://img.haomeiwen.com/i9606385/858e1797580eaeb0.jpg)
省去之前熟悉的建工程步骤。
首先编写爬虫将网页整篇保存下来:
import scrapy
class PandaSpiderSpider(scrapy.Spider):
name = 'panda_spider'
start_urls = ['https://www.panda.tv/555888']
def parse(self, response):
print(response)
f = open("out.txt","w")
print >> f, "%s" % (response.body)
f.close()
然后写python运行scarpy程序并从out.txt中正则提取信息:
import time
import os
import re
totaltime = 0
for deltaT in range(10): #重复爬十次
os.system("scrapy crawl panda_spider")
# 提取单个网页文件字段信息,保存到out.txt中
f = open('out.txt','r')
s=f.read()
f.close()
w=re.search('\'roominfo\'.+',s).group() #提取包含信息的整行
x=re.search('"person_num":"\d+","classification"',w).group() #提取包含信息的字段
x=re.search('\d+',x).group() #提取所需信息
print(x) #x就是我们需要提取的信息
time.sleep(30)
#将时间-数据写入文件data.txt
g = open('data.txt','a+')
print >> g,"%s %s" % (totaltime,x)
g.close()
totaltime += 30
print('finished!')
运行py程序即可开始爬取,这里重点学习python正则表达式的用法。
注意写文件的参数'a+'表示追加,如没有文件则新建。
该例子中爬虫间隔时间为30秒,一共爬10次。