今天使用scrapy框架对 58921 网站上的数据进行爬取,由于该网站上的电影票房是图片,因此还调用了百度AI接口,具体代码如下:
# -*- coding: utf-8 -*-
import scrapy
import re
import Move.baiduAI as baidu
class MsSpider(scrapy.Spider):
name = "mS"
allowed_domains = ["58921.com"]
start_urls = ['http://58921.com/alltime']
def parse(self, response):
tr_list = response.xpath("//div[@class='table-responsive']/table/tbody/tr")
item = {"move_name": [], "box_office": []}
i = 0
for tr in tr_list:
item["move_name"].append(tr.xpath("./td/a/text()").extract_first())
image_url = tr.xpath("./td/img/@src").extract_first()
#调用百度AI接口
box_office = re.match(r"\d*.\d*", baidu.run(image_url)).group()
item["box_office"].append(float(box_office))
print("进度:", i)
i += 1
yield item
在 pipeline 文件里边调用了 matplotlib 库,把处理到的数据进行可视化
from matplotlib import pyplot as plt
import matplotlib
font = {
'family': 'MicroSoft YaHei',
'weight': 'bold',
'size': '10'
}
matplotlib.rc("font", **font)
class MovePipeline(object):
def process_item(self, item, spider):
plt.figure(figsize=(20, 8), dpi=80)
plt.barh(range(len(item["move_name"])), item["box_office"], height=0.2)
plt.yticks(range(len(item["move_name"])), item["move_name"])
plt.show()
return item
结果如下: