目录
一、scrapy 比脚本好在哪
二、面向对象的三大特性
三、哪个更重要
四、反爬机制都有哪些
五、列表和集合有哪些区别
六、is == 有什么区别
七、面向对象 三大特性都什么意思
八、讲解房价怎么爬的
九、除了python会其他语言吗
十、列表有哪些用法?
十二、分析一个疫情网站,爬取我们需要的数据
十三、将一个长文本解析成特定的数据格式
集合具有以下特点:
列表具有以下特点:
JAVA,C++
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
d = webdriver.Chrome('D:\\an\Lib\site-packages\\chromedriver.exe')
d.get('https://wp.m.163.com/163/page/news/virus_report/index.html')
time.sleep(5)
print(d.page_source)
首先,通过selenium分析网站,将我们所需要的页面源码找出来,复制到自定义的html文件中,之后我们会利用Xpath从这个自定义的文件中将数据爬取出来。
from lxml import etree
op = open('疫情','r',encoding='utf8')
data = op.read()
op.close()
divs = etree.HTML(data).xpath('//li/div[@class="province"]')
print(divs)
data = [['地区','现有确诊','确诊','昨日新增','死亡','治愈']]
for div in divs:
地区= div.xpath('span[1]/text()')[0]
现有确诊= div.xpath('span[2]/text()')[0]
确诊= div.xpath('span[3]/text()')[0]
昨日新增= div.xpath('span[3]/span/text()')[0]
死亡= div.xpath('span[4]/text()')[0]
治愈= div.xpath('span[5]/text()')[0]
print(地区,现有确诊,确诊,昨日新增,死亡,治愈)
data.append([地区,现有确诊,确诊,昨日新增,死亡,治愈])
print(data)
import csv
with open('疫情1.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(data)
代码如上,将数据爬取出来之后,保存为.csv格式,效果如图:
解析前:
long_text = """
Variopartner SICAV
529900LPCSV88817QH61
1. TARENO GLOBAL WATER SOLUTIONS FUND
LU2001709034
LU2057889995
LU2001709547
2. TARENO FIXED INCOME FUND
LU1299722972
3. TARENO GLOBAL EQUITY FUND
LU1299721909
LU1299722113
LU1299722030
4. MIV GLOBAL MEDTECH FUND
LU0329630999
LU0329630130
"""
解析后:
data1 = {
'name': 'Variopartner SICAV',
'lei': '529900LPCSV88817QH61',
'sub_fund': [{
'title': 'TARENO GLOBAL WATER SOLUTIONS FUND',
'isin': ['LU2001709034', 'LU2057889995', 'LU2001709547']
}, {
'title': 'TARENO FIXED INCOME FUND',
'isin': ['LU1299722972']
}, {
'title': 'TARENO GLOBAL EQUITY FUND',
'isin': ['LU1299721909', 'LU1299722113', 'LU1299722030']
}, {
'title': 'MIV GLOBAL MEDTECH FUND',
'isin': ['LU0329630999', 'LU0329630130']
}]
}
这里我们直接用正则将文本中的数据给匹配成我们想要的格式就行了,解析代码如下:
import re
lists = re.split('\d+\. ',long_text)
name_lei = lists[0].strip().split('\n')
dicts = {'name':name_lei[0],'lei':name_lei[1]}
lists_total = []
for i in lists[1:]:
lists1 = i.strip().split('\n')
dicts1 = {'title':lists1[0],'isin':lists1[1:]}
lists_total.append(dicts1)
dicts['sub_fund'] = lists_total
print(dicts)