导航:首页 > 编程语言 > python获取链上数据

python获取链上数据

发布时间:2022-07-30 05:01:29

A. python怎么爬取数据

根据你要抓取页面的源码字段来进行爬取。根据对应的源码找到你的需求数据,主要用到requests+BeautifulSoup,其中requests用于请求页面,BeautifulSoup用于解析页面。

B. 如何利用python爬虫从网页上获取数据

凉州词》: 葡萄美酒夜光杯欲饮琵琶马催醉卧沙场君莫笑古征战几

C. 如何利用python爬虫获取数据

python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写。python在生物信息、统计、网页制作、计算等多个领域都体现出了强大的功能。python和其他脚本语言如java、R、Perl一样,都可以直接在命令行里运行脚本程序。工具/原料python;CMD命令行;windows操作系统方法/步骤1、首先下载安装python,建议安装2.7版本以上,3.0版本以下,由于3.0版本以上不向下兼容,体验较差。2、打开文本编辑器,推荐editplus,notepad等,将文件保存成.py格式,editplus和notepad支持识别python语法。脚本第一行一定要写上#!usr/bin/python表示该脚本文件是可执行python脚本如果python目录不在usr/bin目录下,则替换成当前python执行程序的目录。3、编写完脚本之后注意调试、可以直接用editplus调试。调试方法可自行网络。脚本写完之后,打开CMD命令行,前提是python已经被加入到环境变量中,如果没有加入到环境变量,请网络4、在CMD命令行中,输入“python”+“空格”,即”python“;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可。

D. python可以爬取什么数据

一、爬取我们所需要的一线链接
channel_extract.py
这里的一线链接也就是我们所说的大类链接:
from bs4 import BeautifulSoupimport requests

start_url = 'http://lz.ganji.com/wu/'host_url = 'http://lz.ganji.com/'def get_channel_urls(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml')
links = soup.select('.fenlei > dt > a') #print(links)
for link in links:
page_url = host_url + link.get('href')
print(page_url)#get_channel_urls(start_url)channel_urls = '''
http://lz.ganji.com/jiaju/
http://lz.ganji.com/rironghuo/
http://lz.ganji.com/shouji/
http://lz.ganji.com/bangong/
http://lz.ganji.com/nongyongpin/
http://lz.ganji.com/jiadian/
http://lz.ganji.com/ershoubijibendiannao/
http://lz.ganji.com/ruanjiantushu/
http://lz.ganji.com/yingyouyunfu/
http://lz.ganji.com/diannao/
http://lz.ganji.com/xianlipin/
http://lz.ganji.com/fushixiaobaxuemao/
http://lz.ganji.com/meironghuazhuang/
http://lz.ganji.com/shuma/
http://lz.ganji.com/laonianyongpin/
http://lz.ganji.com/xuniwupin/
'''

那么拿我爬取的58同城为例就是爬取了二手市场所有品类的链接,也就是我说的大类链接;
找到这些链接的共同特征,用函数将其输出,并作为多行文本储存起来。
二、获取我们所需要的详情页面的链接和详情信息
page_parsing.py
1、说说我们的数据库:
先看代码:
#引入库文件from bs4 import BeautifulSoupimport requestsimport pymongo #python操作MongoDB的库import reimport time#链接和建立数据库client = pymongo.MongoClient('localhost', 27017)
ceshi = client['ceshi'] #建ceshi数据库ganji_url_list = ceshi['ganji_url_list'] #建立表文件ganji_url_info = ceshi['ganji_url_info']123456789101112

2、判断页面结构是否和我们想要的页面结构相匹配,比如有时候会有404页面;
3、从页面中提取我们想要的链接,也就是每个详情页面的链接;
这里我们要说的是一个方法就是:
item_link = link.get('href').split('?')[0]12

这里的这个link什么类型的,这个get方法又是什么鬼?
后来我发现了这个类型是
<class 'bs4.element.Tab>1

如果我们想要单独获取某个属性,可以这样,例如我们获取它的 class 叫什么
print soup.p['class']
#['title']12

还可以这样,利用get方法,传入属性的名称,二者是等价的
print soup.p.get('class')#['title']12

下面我来贴上代码:
#爬取所有商品的详情页面链接:def get_type_links(channel, num):
list_view = '{0}o{1}/'.format(channel, str(num)) #print(list_view)
wb_data = requests.get(list_view)
soup = BeautifulSoup(wb_data.text, 'lxml')
linkOn = soup.select('.pageBox') #判断是否为我们所需页面的标志;
#如果爬下来的select链接为这样:div.pageBox > ul > li:nth-child(1) > a > span 这里的:nth-child(1)要删掉
#print(linkOn)
if linkOn:
link = soup.select('.zz > .zz-til > a')
link_2 = soup.select('.js-item > a')
link = link + link_2 #print(len(link))
for linkc in link:
linkc = linkc.get('href')
ganji_url_list.insert_one({'url': linkc})
print(linkc) else:

4、爬取详情页中我们所需要的信息
我来贴一段代码:
#爬取赶集网详情页链接:def get_url_info_ganji(url):
time.sleep(1)
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml') try:
title = soup.select('head > title')[0].text
timec = soup.select('.pr-5')[0].text.strip()
type = soup.select('.det-infor > li > span > a')[0].text
price = soup.select('.det-infor > li > i')[0].text
place = soup.select('.det-infor > li > a')[1:]
placeb = [] for placec in place:
placeb.append(placec.text)
tag = soup.select('.second-dt-bewrite > ul > li')[0].text
tag = ''.join(tag.split()) #print(time.split())
data = { 'url' : url, 'title' : title, 'time' : timec.split(), 'type' : type, 'price' : price, 'place' : placeb, 'new' : tag
}
ganji_url_info.insert_one(data) #向数据库中插入一条数据;
print(data) except IndexError: 21222324252627282930

四、我们的主函数怎么写?
main.py
看代码:
#先从别的文件中引入函数和数据:from multiprocessing import Poolfrom page_parsing import get_type_links,get_url_info_ganji,ganji_url_listfrom channel_extract import channel_urls#爬取所有链接的函数:def get_all_links_from(channel):
for i in range(1,100):
get_type_links(channel,i)#后执行这个函数用来爬取所有详情页的文件:if __name__ == '__main__':# pool = Pool()# # pool = Pool()# pool.map(get_url_info_ganji, [url['url'] for url in ganji_url_list.find()])# pool.close()# pool.join()#先执行下面的这个函数,用来爬取所有的链接:if __name__ == '__main__':
pool = Pool()
pool = Pool()
pool.map(get_all_links_from,channel_urls.split())
pool.close()
pool.join()

五、计数程序
count.py
用来显示爬取数据的数目;
import timefrom page_parsing import ganji_url_list,ganji_url_infowhile True: # print(ganji_url_list.find().count())
# time.sleep(5)
print(ganji_url_info.find().count())
time.sleep(5)

E. 如何用最简单的Python爬虫采集整个网站

在之前的文章中Python实现“维基网络六度分隔理论“之基础爬虫,我们实现了在一个网站上随机地从一个链接到另一个链接,但是,如果我们需要系统地把整个网站按目录分类,或者要搜索网站上的每一个页面,我们该怎么办?我们需要采集整个网站,但是那是一种非常耗费内存资源的过程,尤其是处理大型网站时,比较合适的工具就是用一个数据库来存储采集的资源,之前也说过。下面来说一下怎么做。

网站地图sitemap
网站地图,又称站点地图,它就是一个页面,上面放置了网站上需要搜索引擎抓取的所有页面的链接(注:不是所有页面,一般来说是所有文章链接。大多数人在网站上找不到自己所需要的信息时,可能会将网站地图作为一种补救措施。搜索引擎蜘蛛非常喜欢网站地图。
对于SEO,网站地图的好处:
1.为搜索引擎蜘蛛提供可以浏览整个网站的链接简单的体现出网站的整体框架出来给搜索引擎看;
2.为搜索引擎蜘蛛提供一些链接,指向动态页面或者采用其他方法比较难以到达的页面;
3.作为一种潜在的着陆页面,可以为搜索流量进行优化;
4.如果访问者试图访问网站所在域内并不存在的URL,那么这个访问者就会被转到“无法找到文件”的错误页面,而网站地图可以作为该页面的“准”内容。
数据采集
采集网站数据并不难,但是需要爬虫有足够的深度。我们创建一个爬虫,递归地遍历每个网站,只收集那些网站页面上的数据。一般的比较费时间的网站采集方法从顶级页面开始(一般是网站主页),然后搜索页面上的所有链接,形成列表,再去采集到的这些链接页面,继续采集每个页面的链接形成新的列表,重复执行。
很明显,这是一个复杂度增长很快的过程。加入每个页面有10个链接,网站上有5个页面深度,如果采集整个网站,一共得采集的网页数量是105,即100000个页面。
因为网站的内链有很多都是重复的,所以为了避免重复采集,必须链接去重,在Python中,去重最常用的方法就是使用自带的set集合方法。只有“新”链接才会被采集。看一下代码实例:
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport repages = set()def getLinks(pageurl):globalpageshtml= urlopen("" + pageurl)soup= BeautifulSoup(html)forlink in soup.findAll("a", href=re.compile("^(/wiki/)")):if'href' in link.attrs:iflink.attrs['href'] not in pages:#这是新页面newPage= link.attrs['href']print(newPage)pages.add(newPage)getLinks(newPage)getLinks("")
原理说明:程序执行时,用函数处理一个空URL,其实就是维基网络的主页,然后遍历首页上每个链接,并检查是否已经在全局变量集合pages里面,如果不在,就打印并添加到pages集合,然后递归处理这个链接。
递归警告:Python默认的递归限制是1000次,因为维基网络的链接浩如烟海,所以这个程序达到递归限制后就会停止。如果你不想让它停止,你可以设置一个递归计数器或者其他方法。
采集整个网站数据
为了有效使用爬虫,在用爬虫的时候我们需要在页面上做一些事情。我们来创建一个爬虫来收集页面标题、正文的第一个段落,以及编辑页面的链接(如果有的话)这些信息。
第一步,我们需要先观察网站上的页面,然后制定采集模式,通过F12(一般情况下)审查元素,即可看到页面组成。
观察维基网络页面,包括词条和非词条页面,比如隐私策略之类的页面,可以得出下面的规则:
所有的标题都是在h1→span标签里,而且页面上只有一个h1标签。
所有的正文文字都在div#bodyContent标签里,如果我们想获取第一段文字,可以用div#mw-content-text→p,除了文件页面,这个规则对所有页面都适用。
编辑链接只出现在词条页面上,如果有编辑链接,都位于li#ca-edit标签的li#ca-edit→span→a里面。
调整一下之前的代码,我们可以建立一个爬虫和数据采集的组合程序,代码如下:
import redef getLinks(pageUrl):global pageshtml = urlopen("" + pageUrl)soup = BeautifulSoup(html)try:print(soup.h1.get_text())print(soup.find(id="mw-content-text").findAll("p")[0])print(soup.find(id="ca-edit").find("span").find("a").attrs['href'])except AttributeError:print("页面缺少属性")for link in soup.findAll("a", href =re.compile("^(/wiki/)")):if 'href' in link.attrs:#这是新页面newPage = link.attrs['href']print("------------------\n"+newPage)
这个for循环和原来的采集程序基本上是一样的,因为不能确定每一页上都有所有类型的数据,所以每个打印语句都是按照数据在页面上出现的可能性从高到低排列的。
数据存储到MySQL
前面已经获取了数据,直接打印出来,查看比较麻烦,所以我们就直接存到MySQL里面吧,这里只存链接没有意义,所以我们就存储页面的标题和内容。前面我有两篇文章已经介绍过如何存储数据到MySQL,数据表是pages,这里直接给出代码:
import reimport datetimeimport randomimport pymysqlconn = pymysql.connect(host = '127.0.0.1',port = 3306, user = 'root', passwd = '19930319', db = 'wiki', charset ='utf8mb4')cur = conn.cursor()cur.execute("USE wiki")#随机数种子random.seed(datetime.datetime.now())#数据存储def store(title, content):cur.execute("INSERT INTO pages(title, content)VALUES(\"%s\", \"%s\")", (title, content))cur.connection.commit()def getLinks(articleUrl):html = urlopen("" + articleUrl)title = soup.find("h1").get_text()content =soup.find("div",{"id":"mw-content-text"}).find("p").get_text()store(title, content)returnsoup.find("div",{"id":"bodyContent"}).findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))#设置第一页links =getLinks("/wiki/Kevin_Bacon")try:while len(links)>0:newArticle = links[random.randint(0, len(links)-1)].attrs['href']print (newArticle)links = getLinks(newArticle)finally:cur.close()conn.close()
小结
今天主要讲一下Python中遍历采集一个网站的链接,方便下面的学习。
希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。

F. python如何扒取数据

网络爬虫(英语:web crawler),也叫网上蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。

这里提到的编纂网络索引,就是搜索引擎干的事情。我们对搜索引擎并不陌生,Google、网络等搜索引擎可能每天都在帮我们快速获得

信息。搜索引擎的工作过程是怎样的呢?

首先,就是有网络爬虫不断抓取各个网站的网页,存放到搜索引擎的数据库;

接着,索引程序读取数据库的网页进行清理,建立倒排索引;

最后,搜索程序接收用户的查询关键词,去索引里面找到相关内容,并通过一定的排序算法(Pagerank等)把最相关最好的结果排在最前面呈现给用户。

看上去简简单单的三个部分,却构成了强大复杂的搜索引擎系统。而网络爬虫是其中最基础也很重要的一部分,它决定着搜索引擎数据的完整性和丰富性。我们也看到网络爬虫的主要作用是获取数据。

由此简单地说,网络爬虫就是获取互联网公开数据的自动化工具。

这里要强调一下,网络爬虫爬取的是互联网上的公开数据,而不是通过特殊技术非法入侵到网站服务器获取的非公开数据。

推荐学习《python教程》。

G. 如何用python抓取网页上的数据

使用内置的包来抓取,就是在模仿浏览器访问页面,再把页面的数据给解析出来,也可以看做是一次请求。

H. 如何用python 爬虫抓取金融数据

获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。

本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。

一、网页源码的获取

很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。

为了减少干扰,我先用正则表达式从整个页面源码中匹配出以上的主体部分,然后从主体部分中匹配出每只股票的信息。代码如下。

pattern=re.compile('<tbody[sS]*</tbody>')
body=re.findall(pattern,str(content)) #匹配<tbody和</tbody>之间的所有代码pattern=re.compile('>(.*?)<')
stock_page=re.findall(pattern,body[0]) #匹配>和<之间的所有信息

其中compile方法为编译匹配模式,findall方法用此匹配模式去匹配出所需信息,并以列表的方式返回。正则表达式的语法还挺多的,下面我只罗列所用到符号的含义。

语法 说明

. 匹配任意除换行符“ ”外的字符

* 匹配前一个字符0次或无限次

? 匹配前一个字符0次或一次

s 空白字符:[<空格> fv]

S 非空白字符:[^s]

[...] 字符集,对应的位置可以是字符集中任意字符

(...) 被括起来的表达式将作为分组,里面一般为我们所需提取的内容

正则表达式的语法挺多的,也许有大牛只要一句正则表达式就可提取我想提取的内容。在提取股票主体部分代码时发现有人用xpath表达式提取显得更简洁一些,看来页面解析也有很长的一段路要走。

三、所得结果的整理

通过非贪婪模式(.*?)匹配>和<之间的所有数据,会匹配出一些空白字符出来,所以我们采用如下代码把空白字符移除。

stock_last=stock_total[:] #stock_total:匹配出的股票数据for data in stock_total: #stock_last:整理后的股票数据
if data=='':
stock_last.remove('')

最后,我们可以打印几列数据看下效果,代码如下

print('代码',' ','简称',' ',' ','最新价',' ','涨跌幅',' ','涨跌额',' ','5分钟涨幅')for i in range(0,len(stock_last),13): #网页总共有13列数据
print(stock_last[i],' ',stock_last[i+1],' ',' ',stock_last[i+2],' ',' ',stock_last[i+3],' ',' ',stock_last[i+4],' ',' ',stock_last[i+5])

I. python怎样抓取securecrt上的数据

通过execl执行是有区别的,通过命令行执行解释器文件就像通过命令行执行普通程序一样,程序名称作为第一个参数,命令行后面依次作为后续参数。正因为对于解释器文件的execl方式和命令行方式执行时选取第一个参数的方式不同,所以对于解释器文件a.py:
(1) 在命令行输入:./a.py arg1 arg2;
(2) execl("./a.py","arg1","arg2",(char*)0));
(3) execl("./a.py",”xxx”,"arg1","arg2",(char*)0));
方式(1)和方式(2)不等价,因为方式(1)中arg1会被当做第二个参数传递给解释器,而方式(2)中arg2会被当做第二个参数传递给解释器。方式(1)和方式(3)是等价的。
对于普通文件foo:
(1) 在命令行输入: ./foo arg1 arg2;
(2) execl("./foo","arg1","arg2",(char*)0))
方式(1)和方式(2)是等价的。

阅读全文

与python获取链上数据相关的资料

热点内容
新概念四册pdf 浏览:357
怎么下载悦虎检测app 浏览:526
cad表达式命令 浏览:198
程序员去一个小公司值不值得 浏览:846
程序员做个程序多少钱 浏览:495
win10原始解压软件 浏览:319
阿里程序员的老家 浏览:258
量子加密银行 浏览:193
命令方块获得指令手机 浏览:499
学习结束感言简短程序员 浏览:398
android关机闹钟实现 浏览:968
鼠标一键打开文件夹设置 浏览:161
程序员看过来我想静静搞笑视频 浏览:370
curlphp爬虫 浏览:874
python按日期循环 浏览:110
php三个等号 浏览:760
培训班出来的程序员解决问题很差 浏览:963
程序员那么可爱25集 浏览:753
服务器地址和ip地址一样不 浏览:664
php中括号定义数组 浏览:602