【python爬虫】抛砖引玉--批量爬取某财富股票网证券机构宏观研报
本帖最后由 fengmodel 于 2020-3-20 13:16 编辑本人零基础自学python一个月,目的是为了能将平常一些人为机械化的操作交给机器进行,尝试写了一段代码,爬取证券机构发布的一些宏观研报
自学的视频和书籍:Python网络爬虫与信息提取_北京理工大学 嵩天MOOC,Learn Python3 the Hard Way
代码编写和调试工具:VS code,jupyter notebook(anaconda集成)
基本思路:
1. 首先获取进入宏观研报的页面,分析页面知道是JS显示
2. 获取真实json的链接,分析json的链接,可知链接里面参数含义,比如页面显示研报数量,第几页,查询起止时间,毫秒时间戳等等
3. 解析json,得到单独研报的标题、页面真实地址
4. 再次访问单独研报页面,获取’PDF‘的存放链接地址(这里的文件类型不一定是PDF,也有可能是excel)
5. 按标题修改文件并下载保存
花了一天多的时间完善这代码,其实还想了一些改善,但是还没有将它们实现;
我将不足和期望先提出来,希望抛砖引玉,有兴趣的朋友可以在评论中分享完善其他功能:
1. 为了防止被网站封禁,加了随机useragent,但是{代}{理}、多线程等功能还没学过,无法实现
2. 进度条可以有,但是还在研究
3. 研报存到指定的目录(没有就生成),并且判断文件是否存在,存在就跳过的功能
4. 我知道我的代码还可以再精简,但是知识经验太少,暂时就这样
本代码只是以学习为目的,而且本人也是初学者,有不足勿喷,感谢!
import requests, json, time, random,os
from bs4 import BeautifulSoup
def UserAgent():
user_agent_list = ['Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36',
'Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36',
'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6',
'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36',
'Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36']
UserAgent={'User-Agent': random.choice(user_agent_list)}
return UserAgent
def timenow():
last_para = int(time.time() * 1000)
now = int(time.time())
timeArray = time.localtime(now)
end_Time = time.strftime("%Y-%m-%d", timeArray)
return last_para,end_Time
def macResearch_page(end_Time,last_para,UserAgent):
# 经测试pageSize最大数值为100
macResearchPageurl = 'http://reportapi.eastmoney.com/report/jg?pageSize=100&beginTime=2018-03-19&endTime=' + str(end_Time) + '&pageNo=1&fields=&qType=3&orgCode=&author=&_=' + str(last_para)
macResearch='http://data.eastmoney.com/report/zw_macresearch.jshtml?encodeUrl='
html = requests.get(macResearchPageurl, timeout=3, headers=UserAgent)
text=html.text
return text,macResearch
def parser_json(text,sub_url):
djs = json.loads(text, encoding='utf-8')
dic={}
for item in djs['data']:
item_publishDate=item['publishDate'][:10].split('-')+item['publishDate'][:10].split('-')+item['publishDate'][:10].split('-')
pdf_title=item_publishDate+item['title']
page_url=sub_url+item["encodeUrl"]
dic=page_url
return dic
def save_file(dic,UserAgent,num):
# num是整数并且不能超过100
a=0
for key in dic.keys():
url_r=dic
name=key
real_html=requests.get(url_r,headers=UserAgent).text
soup = BeautifulSoup(real_html, 'html.parser')
file_url=soup.find_all('a',attrs={'class','pdf-link'})['href']
last_response=requests.get(file_url,headers=UserAgent)
file_down=last_response.content
file_name=name+'.'+file_url.split('.')[-1]
content_size = int(last_response.headers['Content-Length']) / (1024*1024)
print(file_url)
with open(file_name,'wb') as f:
f.write(file_down)
f.close()
print('成功!保存完成,文件大小:{:0.3f}MB'.format(content_size))
a+=1
if a==num:
break
def main():
num=int(input('注意:请输入1-100的整数:\n'))
user_agent=UserAgent()
last_para,end_Time=timenow()
text,sub_url=macResearch_page(end_Time,last_para,user_agent)
dic=parser_json(text,sub_url)
save_file(dic,user_agent,num)
print('全部完成!')
main() 给你封装了下
链接: 链接:https://pan.baidu.com/s/1eZNviffzRZ2B7pc5YV89-A 提取码:dhqa a1886733 发表于 2020-12-20 17:52
厉害 厉害 楼主自学的资源能否也一同分享下感谢
你好,我是基本零基础,大学里计算机二级考的VB,基本没怎么用过。学Python,首先看的是《learn python3 the hard way》,本书也有中文版《笨方法学python》,一定要学python3版本;接下来爬虫课程可以看中国MOOC上嵩天老师的python爬虫;然后,看看别人的代码,能用到的部分保存下来....具体的资源搜索引擎都能找到 感谢楼主分享!!!!{:301_984:} 我比你更白:wwqwq 厉害了,学一个有能有成果了 厉害了,学习下,收藏了, 哇 自学的 好厉害 用python做日常证券投资买卖吗?厉害。。。。 这个派森到底是干什么的 怎么会这么强大 谢谢分享 膜拜大佬