Use BeautifulSoup to crawl foreign exchange data and organize its usage

# -*- coding: utf-8 -*-

import requests
import pandas as pd
from bs4 import BeautifulSoup
#from lxml import etree
#import time
#from time import sleep
url = 'http://quote.fx678.com/exchange/WH'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

response=requests.get(url,headers=headers)
soup=BeautifulSoup(response.content)
item_list=soup.find_all('td')#找到网页表格中的所有内容
num=len(item_list)
print(num)
352
names=[]                  #存放外汇产品的名称
price_new=[]              #外汇产品的最新价格
price_change=[]           #外汇产品涨跌值
price_percentage=[]       #外汇产品的涨跌幅度
price_high=[]             #外汇产品当日最高价
price_low=[]              #外汇产品当日最低价
price_yesterday=[]        #外汇产品昨日收盘价
time_update=[]            #更新时间
for i in range(0,num,8):#从0位置开始,每隔7个位置就是产品名称
    names.append(item_list[i].text)
for i in range(1,num,8):#从1位置开始,每隔7个位置就是产品j价格
    price_new.append(item_list[i].text)
for i in range(2,num,8):#从2位置开始,每隔7个位置就是产品涨跌值
    price_change.append(item_list[i].text)
for i in range(3,num,8):#从3位置开始,每隔7个位置就是产品涨跌幅度
    price_percentage.append(item_list[i].text)
for i in range(4,num,8):#从4位置开始,每隔7个位置就是产品当日最高价
    price_high.append(item_list[i].text)
for i in range(5,num,8):#从5位置开始,每隔7个位置就是产品当日最低价
    price_low.append(item_list[i].text)
for i in range(6,num,8):#从6位置开始,每隔7个位置就是产品昨日收盘时价
    price_yesterday.append(item_list[i].text)
for i in range(7,num,8):#从7位置开始,每隔7个位置就是产品价格更新时间
    time_update.append(item_list[i].text)
item_dict={'names':names,'price_new':price_new,'price_change':price_change,'price_percentage':price_percentage,'price_high':price_high,\
      'price_low':price_low,'price_yesterday':price_yesterday,'time_update':time_update}
df=pd.DataFrame(item_dict)
df
.dataframe thead tr:only-child th { text-align: right; } .dataframe thead th { text-align: left; } .dataframe tbody tr th { vertical-align: top; }
names price_change price_high price_low price_new price_percentage price_yesterday time_update
0 US dollar index -0.25 91.33 90.95 91.01 -0.27% 91.26 21:00:51
1 EURUSD 0.0040 1.2210 1.2146 1.2201 0.33% 1.2161 21:00:51
2 GBP USD 0.0050 1.3992 1.3895 1.3982 0.36% 1.3932 21:00:50
3 USDJPY -0.28 109.47 109.10 109.15 -0.26% 109.43 21:00:51
4 AUDUSD 0.0013 0.7584 0.7557 0.7578 0.17% 0.7565 21:00:51
5 USD CHF -0.0010 0.9849 0.9817 0.9823 -0.10% 0.9833 21:00:50
6 USD CAD -0.0013 1.2871 1.2821 1.2831 -0.10% 1.2844 21:00:51
7 US dollar Hong Kong dollar 0.0011 7.8483 7.8460 7.8473 0.01% 7.8462 21:00:51
8 USD onshore RMB -0.0056 6.3369 6.3185 6.3210 -0.09% 6.3266 21:00:08
9 USD Offshore RMB -0.0125 6.3315 6.3083 6.3098 -0.20% 6.3223 21:00:51
10 NZDCAD 0.0012 0.9093 0.9061 0.9090 0.13% 0.9078 21:00:51
11 EURNZD 0.0016 1.7258 1.7178 1.7222 0.09% 1.7206 21:00:51
12 AUDJPY -0.06 82.92 82.61 82.72 -0.07% 82.78 21:00:51
13 AUDNZD -0.0004 1.0729 1.0694 1.0697 -0.04% 1.0701 21:00:51
14 AUDCAD 0.0007 0.9733 0.9711 0.9723 0.07% 0.9716 21:00:51
15 CHF JPY -0.15 111.39 110.88 111.14 -0.14% 111.29 21:00:51
16 AUDCHF 0.0006 0.7458 0.7435 0.7444 0.08% 0.7438 21:00:51
17 GBP CAD 0.0047 1.7953 1.7860 1.7941 0.26% 1.7894 21:00:51
18 EUR GBP -0.0004 0.8751 0.8697 0.8726 -0.05% 0.8730 21:00:51
19 CAD and CHF 0.0000 0.7673 0.7650 0.7656 0.00% 0.7656 21:00:51
20 Pound sterling 0.19 152.73 151.98 152.64 0.12% 152.45 21:00:51
21 EURJPY 0.12 133.25 132.69 133.19 0.09% 133.07 21:00:51
22 EURCHF 0.0027 1.1989 1.1957 1.1984 0.23% 1.1957 21:00:51
23 NZDJPY -0.01 77.44 77.15 77.33 -0.01% 77.34 21:00:51
24 GBP CHF 0.0038 1.3761 1.3684 1.3735 0.28% 1.3697 21:00:51
25 NZDCHF 0.0010 0.6967 0.6934 0.6959 0.14% 0.6949 21:00:51
26 Canadian dollar Japanese yen -0.12 85.31 85.01 85.08 -0.14% 85.19 21:00:51
27 GBP AUD 0.0036 1.8473 1.8384 1.8451 0.20% 1.8415 21:00:51
28 EUR AUD 0.0024 1.6111 1.6058 1.6100 0.15% 1.6076 21:00:51
29 GBP NZD 0.0027 1.9759 1.9690 1.9737 0.14% 1.9710 21:00:51
30 EURCAD 0.0035 1.5656 1.5602 1.5655 0.22% 1.5620 21:00:51
31 US Dollar Polish Zloty 0.0027 3.7395 3.7329 3.7361 0.07% 3.7334 13:32:43
32 US Dollar Mexican Peso -0.053 18.894 18.773 18.794 -0.28% 18.847 21:00:51
33 US Dollar Hungarian Forint 0.41 275.76 275.29 275.72 0.15% 275.31 13:32:43
34 US Dollar Turkish Lira -0.0203 4.0884 4.0580 4.0613 -0.50% 4.0816 21:00:51
35 US Dollar South African Rand -0.076 12.466 12.354 12.364 -0.61% 12.440 21:00:50
36 美元捷克朗 0.027 23.706 23.666 23.695 0.11% 23.668 13:32:44
37 美元丹麦克朗 -0.0195 6.1339 6.1020 6.1062 -0.32% 6.1257 21:00:51
38 美元挪威 -0.0338 7.9927 7.9335 7.9391 -0.42% 7.9729 21:00:51
39 美元卢布 0.152 63.034 62.138 62.569 0.24% 62.417 21:00:51
40 美元瑞典 0.0137 8.6205 8.5348 8.5787 0.16% 8.5650 21:00:51
41 美元新币 -0.0035 1.3291 1.3248 1.3254 -0.26% 1.3289 21:00:51
42 纽币美元 0.0016 0.7088 0.7056 0.7085 0.23% 0.7069 21:00:51
43 比特币美元 8.77 4153.62 4019.65 4081.77 0.22% 4073.00 13:38:42

soup.find_all()方法介绍 ,soup.find()与之基本类似,只是返回的是第一个值

find_all( name , attrs , recursive , text , **kwargs )

soup.find_all(‘b’) #查找所有的b标签,返回列表

soup.find_all(re.compile(“^b”)) # 正则表达式

soup.find_all([“a”, “b”]) #传入列表参数,找到所有的a标签和b标签

soup.find_all(id=’link2’) #传入id是link2的参数,Beautiful Soup会搜索每个tag的”id”属性

soup.find_all(href=re.compile(“elsie”)) #传入正则表达式,查找所有的href标签内容中含有 elsie 的内容

soup.find_all(href=re.compile(“elsie”), id=’link1’) # 多层过滤,除了href进行限定之外,对id标签的内容也做了限定

soup.find_all(“div”, class_=”sister”) #最常用的查找技巧,这里之所以加‘_=’是因为‘class’不仅是html中的tag,也是python语法的关键词,其他的不用加下划线

data_soup.find_all(attrs={“data-foo”: “value”}) # 针对html5里面的data- 进行的专项查找

soup.find_all(text=”Elsie”) # 对text内容进行查找

soup.find_all(text=[“Tillie”, “Elsie”, “Lacie”]) # 列表形式进行查找,与上面name类似

soup.find_all(text=re.compile(“Dormouse”)) # 正则表达式形式,与上面类似

soup.find_all(“a”, limit=2) # 找到前两个a标签, limit用来限定次数

我们在写 CSS 时,标签名不加任何修饰,类名前加点,id名前加 #,在这里我们也可以利用类似的方法来筛选元素,用到的方法是soup.select(),返回类型是list

(1)通过标签名查找

soup.select(‘title’)

(2)通过类名查找

soup.select(‘.sister’)

(3)通过 id 名查找

soup.select(‘#link1’)

(4)组合查找

组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开

soup.select(‘p #link1’)

(5)属性查找

查找时还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属于同一节点,所以中间不能加空格,否则会无法匹配到。

soup.select(‘a[class=”sister”]’)

soup.select(‘a[href=”http://example.com/elsie”]’)

get_text()方法可以用来获取内容,请看下面代码:

soup = BeautifulSoup(html.text, ‘lxml’)

print (type(soup.select(‘title’)))

print (soup.select(‘title’)[0].get_text()) # 获取第一个title标签的对应内容

for title in soup.select(‘title’):

       print (title.get_text()) # 获取列表中的title对应内容

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325703432&siteId=291194637