本文作者:罗天尧,新疆大学商学院
本文编辑:胡艺粼
技术总编:方一卓
Stata and Python 数据分析
许多资料整理者,深受网速的困扰。但或许这种困扰并不能完全归咎于网速,如果能充分调动计算机的“主观能动性”,在请求端我们将能够更高效地搜集数据。
import requestscookies = {'PHPSESSID': 'juntbj9ejl8dnroa8qa4r7pbnu',}headers = {'Connection': 'keep-alive','Pragma': 'no-cache','Cache-Control': 'no-cache','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9','Sec-Fetch-Site': 'same-origin','Sec-Fetch-Mode': 'navigate','Sec-Fetch-User': '?1','Sec-Fetch-Dest': 'document','Referer': 'https://www.guo68.com/market?','Accept-Language': 'zh-CN,zh;q=0.9',# 'Cookie': 'PHPSESSID=juntbj9ejl8dnroa8qa4r7pbnu',}resp = requests.get('https://www.guo68.com/market', cookies=cookies, headers=headers).textprint(resp)
from lxml import etreehtml = etree.HTML(resp) #建立解析对象table = html.xpath('/html/body/div[3]/div/div[1]/div[3]/div[2]/ul/a/li/text()') #注意这里需要手动微调,删去多余的索引值print(table)
def spider(url):resp = requests.get(url, cookies=cookies, headers=headers).texthtml = etree.HTML(resp)table = html.xpath('/html/body/div[3]/div/div[1]/div[3]/div[2]/ul/a')for tr in table : #table仍保留了xpath属性,我们可以借此生成工整的信息格式txt = tr.xpath('./li/text()') #在此将每个<a>标签中的文字信息提取csv.writerow(list(txt)) #将一组<a>标签中的信息以列表形式传入if __name__ == '__main__':f = open('data.csv', encoding='utf-8', mode='w', newline='') #newline去除空行csv = csv.writer(f) #提前打开为对象,避免反复打开文件耗时start=time.time() #可以提前import time进行测试的计时操作for i in range(1, 200):url=f'https://www.guo68.com/market?page={i}'spider(url)end=time.time()print(f"耗时:{end-start}s")
D:\Anaconda\python.exe "D:/pycharm project/test.py"耗时:47.112051486968994sProcess finished with exit code 0
from concurrent.futures import ThreadPoolExecutor #导包def spider(url):resp = requests.get(url, cookies=cookies, headers=headers).texthtml = etree.HTML(resp)table = html.xpath('/html/body/div[3]/div/div[1]/div[3]/div[2]/ul/a')for tr in table :txt = tr.xpath('./li/text()')csv.writerow(list(txt))if __name__ == '__main__':f = open('data.csv', encoding='utf-8', mode='w', newline='')csv = csv.writer(f)start=time.time()with ThreadPoolExecutor(50) as t: #开辟线程for i in range(1, 200):t.submit(spider, f'https://www.guo68.com/market?page={i}') #开始线程end=time.time()print(f"耗时:{end-start}s")t.shutdown(wait= True) #关闭线程
D:\Anaconda\python.exe "D:/pycharm project/test.py"耗时:13.467449502944946sProcess finished with exit code 0
#输出结果有随机数据污染(多刷新几次)from threading import Threaddef task(count: int):for n in range(count):print(n)thread1 = Thread(target=task, args=(10,))thread2 = Thread(target=task, args=(20,))thread1.start()thread2.start()thread1.join()thread2.join()print("Main threads is end")
import asyncioimport aiohttpf = open('data.csv', encoding='utf-8', mode='w', newline='')c = csv.writer(f)url_list = [ f"https://www.guo68.com/market?page={x}" for x in range(1, 200)]async def spider(url):async with aiohttp.ClientSession() as session: # 发送网络请求async with session.get(url,cookies=cookies, headers=headers) as resp:resp = await resp.content.read()html = etree.HTML(resp)table = html.xpath('/html/body/div[3]/div/div[1]/div[3]/div[2]/ul/a')for tr in table:txt = tr.xpath('./li/text()')c.writerow(list(txt))async def main():tasks = []for url in url_list:tasks.append(spider(url))await asyncio.wait(tasks)if __name__ == '__main__':start=time.time()# asyncio.run(main()) #RuntimeError: Event loop is closedloop = asyncio.get_event_loop()loop.run_until_complete(main())end=time.time()print(f"耗时:{end-start}s")
D:\Anaconda\python.exe "D:/pycharm project/test.py"耗时:11.6561918258667sProcess finished with exit code 0
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
Stata绘制条形图的进阶用法
Stata绘制饼形图的进阶用法
Stata绘图系列——条形图绘制
“挂羊头卖狗肉”?
cnmapsearch——离公司最近的快餐店在哪
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

