动态网页分析
按照上一篇的分析,直接使用XPath找到该标签,然后通过parse提取出数据,在写入到item中就完事了。但是,当信心满满的写完代码后却发现,控制台输入了一个简简单单的[]
。
小问号你是否有很多朋友。
一顿操作猛如虎,一看输出数据无。那么这到底是怎么回事呢?我们从头开始分析。
打开NetWork,找到tv/
,点开Preview,结果发现只有一个框架,内容却是空白的。
这是由于网页执行js代码,通过Ajax请求数据来重新渲染页面的。所以我们需要找到有数据的那一个请求,然后再对该请求的目标url爬取。
可以在preview中看到这就是我们想要的数据。
我们再找到该请求的header,找到Request URL。
我们直接复制链接到地址栏中,看到我们想要的数据,这熟悉的格式,不就是json吗。
动手撸代码,爬取这个网页,处理json数据,拿到自己想要的数据。
class tvSpider(scrapy.Spider):
name = "douban_tv"
allowed_domain = ["movie.douban.com"]
def __init__(self, *args, **kwargs):
super(tvSpider, self).__init__(*args, **kwargs)
self.start_urls = ["https://movie.douban.com/j/search_subjects?type=tv&tag=热门&sort=recommend&page_limit=20&page_start=0"]
def parse(self, response):
results = json.loads(response.body)['subjects']
for result in results:
tv_item = TvListItem()
url = result['url']
tv_item['url'] = url.strip()
print(url)
这次我们的思路是先拿到每部电视剧的url,然后再回调二次解析的函数获取详细信息。运行爬虫,可以看到我们已经得到了自己想要的结果。
接下在就迭代使用sc