完成时间:大一上
此项目完成于大一的上学期,以下为项目的源码以及截图。
说明
由于此项目于2020年底完成,相关数据已不可信,代码仅供参考。
开源地址
https://github.com/MingLeaf/PythonSpider.git
要求
从钢易网:http://www.gtgqw.com/ 获取上海和北京市场5种主要钢材最近5年的价格数据,将数据保存在Excel文件中,画出同一地区钢材的价格变化折线图,并将上海与北京同类钢材进行价格比较,画出一段时间的对比直方图。
大致步骤
⑴ 模拟浏览器访问:
由于网站拒绝直接使用get方法爬取数据,所以我们只能通过模拟浏览器进行访问。
⑵找目标网站
我们先做了一个for循环来访问所有网站,由于数据量过大,我们只能分段爬取,在一次爬取结束后,我们会记下相应的数字,然后下一次继上一次的数字继续爬取,这是为了不被锁IP。
注意事项, 按段爬取,不要一次全爬,爬一段时间之后停止,切换手机热点之后继续爬,可以防止被封IP
爬取过程中不要动那三个csv文件和txt文件,否则会导致写入失败
for i in range(1551119,1595812):
t = threading.Thread(target=get_data, args=(i, semaphore))
t.start()
time.sleep(0.5)
1 | def get_data(id,semaphore): |
(3)进行数据筛选
try:
table = re.findall(r'<table.*?>(.*?)</table>',text,re.S)[0]
if_find = 0
for t in d_list:
if title.find(t)>=0:
d_date = re.findall('<div class="changgui">.*? .*? (.*?)</div>',text,re.S)[0]
tr=re.findall(r'<tr>(.*?)</tr>',table,re.S)[2]
list2 = re.findall(r'<td>(.*?)</td>',tr,re.S)
#替换品名中的特殊字符
list3 = []
for l in list2:
pattern = re.compile(r'<.*?>',re.S)
list3.append(pattern.sub("",l))
sd = t+','+d_date+','+','.join(list3)+','+title+','+str(id)
print(id,title)
if_find=1
file_name='上海'
if t.find('北京')>=0:
file_name='北京'
with open(file_name+'.csv','a+') as f:
f.write(sd+'\n')
if(if_find==0):
print(id,title,'不符合需求')
with open('log.txt','a+')as f:
f.write('{},{}\n'.format(id,title))
except:
print('匹配异常',id)
semaphore.release()
(4)保存到csv文档中
(5)使用Python进行绘图(部分)
小结
通过这两个多月对于爬虫的学习以及实践,在刚开始我们就开始为我们的爬虫基础作准备,看了很多实战视频,也学习了python中很多库,学了基础的一些操作之后,我们可以在一些网站上爬取数据了,可爬虫真有这么简单吗,当然不是,因为如果我们所爬取的网站没有反爬程序的话,我们很容易就能得到我们所需要的数据,但是大多数网站都是有反爬的存在的,他们会根据内容的重要程度而以相对的反爬程度限制我们,所以,对于爬取频率的要求就会高很多。另外,学习了爬虫。我们也明白了一个道理,那就是只爬取一个单调的数据对我们来说并没有任何意义,我们做爬虫真正要做的就是,将我们所爬取到的数据进行分析,并写出结论,这才是我们做爬虫的意义所在。
在绘制图表时我们从发现问题到解决问题,再次清楚的感受到计算机的严谨性与逻辑性,任何的格式误差与代码错误都不允许出现。其次,在代码完善的过程中,我们也学习到了丰富的画图知识,包括如何实现计算机自动读取数据画表、图表的样式优化。
通过画出的图表,可以分析出,主要钢材在北京和上海的市场价格变化趋势近五年表现为先增后减再增,2017-2018年由于全国钢材库存的减少、产量的降低,导致钢材价格升高,然而2019-2020年由于钢材价格出口优势减弱、钢材需求内强外弱,国家不得不减少出口,扩大进口,根据供需的规律,国内钢材储量多了,价格自然降低[ ],而到了2021年,由于疫情的影响、以及国家去库存的手段,钢材受到了限产,加上近期铁矿石的价格上涨,这就意味着成本的上升,导致了钢材价格的明显上涨,通过折线图就可以看出2020-2021年价格的大幅上涨。