找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2887|回复: 2

小白学网络python爬虫示例

[复制链接]

93

主题

6

回帖

113

积分

初中生

热心值
2
IT币
595
贡献值
1
QQ
发表于 2020-3-25 17:10:05 | 显示全部楼层 |阅读模式
实例3--股票数据定向爬虫
程序结构如下:
  1.先从网站中获取股票代号列表(requests库,re库)
  2.遍历每一只股票,从股票信息网站中获得详细信息
  3.使用字典的数据结构,写入文本文件中
以下为代码:
# 股票数据定向爬虫 2 """ 3 Created on Thu Oct 12 16:12:48 2017 4 5 @author: DONG LONG RUI 6 """ 7 import requests 8 from bs4 import BeautifulSoup 9 import re10 #import traceback11 12 def getHTMLText(url,code='utf-8'):#参数code缺省值为‘utf-8’(编码方式)13     try:14         r=requests.get(url,timeout=30)15         r.raise_for_status()16         #r.encoding=r.apparent_encoding17         r.encoding=code18         return r.text19     except:20         return ''21     22 def getStockList(lst,stockURL):23     html=getHTMLText(stockURL,'GB2312')24     soup=BeautifulSoup(html,'html.parser')25     a=soup.find_all('a')26     for i in a:27         try:28             href=i.attrs['href']29             lst.append(re.findall(r'[hz]\d{6}',href)[0])30         except:31             continue32     33 def getStockInfo(lst,stockURL,fpath):34     count=0#35     for stock in lst:36         url=stockURL+stock+'.html'37         html=getHTMLText(url)38         try:39             if html=='':40                 continue41             infoDict={}42             soup=BeautifulSoup(html,'html.parser')43             stockInfo=soup.find('div',attrs={'class':'stock-bets'})44             45             name=stockInfo.find_all(attrs={'class':'bets-name'})[0]46             infoDict.update({'股票名称':name.text.split()[0]})#用空格分开,得到股票名称47             48             keyList=stockInfo.find_all('dt')49             valueList=stockInfo.find_all('dd')50             for i in range(len(keyList)):51                 key=keyList.text52                 val=valueList.text53                 infoDict[key]=val54             55             with open(fpath,'a',encoding='UTF-8') as f:56                 f.write(str(infoDict)+'\n')57                 count=count+1#58                 print('\r当前进度:{:.2f}%'.format(count*100/len(lst)),end='')#动态显示进度,‘\r’实现光标移动,即为不换行的效果59         except:60             count=count+161             print('\r当前进度:{:.2f}%'.format(count*100/len(lst)),end='')#动态显示进度,‘\r’实现光标移动,即为不换行的效果62             #traceback.print_exc()63             continue64 65     66 def main():67     stock_list_url='http://quote.eastmoney.com/stocklist.html'68     stock_info_url='https://gupiao.baidu.com/stock/'69     output_file='C:/Users/DONG LONG RUI/.spyder-py3/BaiduStockInfo.txt'70     slist=[]71     getStockList(slist,stock_list_url)72     getStockInfo(slist,stock_info_url,output_file)73     74 main()[url=][/url]

由于requests库爬虫的限制,我运行后速度会比较慢,后续可尝试scrapy爬虫。

又想到bs4中的BeautifulSoup和re库都可用于搜索html中的目标信息,但两者一般结合起来使用:
  先用BeautifulSoup找到目标信息所在的特定标签,然后在这些标签内容中使用正则表达式去匹配。

ITbang.Net是一个IT教程分享社区!

寻找论坛资源请善用论坛搜索功能,这样会为你节约不少学习时间;

论坛资源如有过期链接失效等,请到教程反馈区发帖反馈,我们会为您良好的行为点赞加分!

回复

使用道具 举报

1

主题

4

回帖

6

积分

小学生

热心值
1
IT币
4
贡献值
0
发表于 2020-3-29 04:39:51 | 显示全部楼层
搬个小板凳学习111

ITbang.Net是一个IT教程分享社区!

寻找论坛资源请善用论坛搜索功能,这样会为你节约不少学习时间;

论坛资源如有过期链接失效等,请到教程反馈区发帖反馈,我们会为您良好的行为点赞加分!

回复

使用道具 举报

0

主题

5

回帖

5

积分

小学生

热心值
0
IT币
4
贡献值
0
发表于 2020-11-18 21:29:48 | 显示全部楼层
搬个小板凳学习222

ITbang.Net是一个IT教程分享社区!

寻找论坛资源请善用论坛搜索功能,这样会为你节约不少学习时间;

论坛资源如有过期链接失效等,请到教程反馈区发帖反馈,我们会为您良好的行为点赞加分!

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
IT帮论坛所发布的一切视频资源、工具软件和网络技术相关的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该资源,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:Service@ITbang.Net

QQ|Archiver|手机版|小黑屋|IT帮社区 ( 冀ICP备19002104号-2 )

GMT+8, 2025-5-4 00:30 , Processed in 0.055902 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表