爬虫实例-----用requests框架和xpath爬取道琼斯指数信息并保存为csv文件
同类链接: 爬虫实例-----用scrapy框架和xpath爬取豆瓣多页面电影信息 里面有scrapy简略的介绍
import csv
import codecs
import requests
from lxml import etree
try:
url = 'http://money.cnn.com/data/dow30' # 要爬取的页面链接
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'
'74.0.3729.169 Safari/537.36' # 配置UA应对反爬
}
response = requests.get(url, headers=headers) # 利用requests获取网页源码
html = etree.HTML(response.text) #etree.HTML():构造了一个XPath解析对象并对HTML文本进行自动修正。
ls = html.xpath('//table[@class="wsod_dataTable wsod_dataTableBig"]//tr') # 用xpath爬取页面table内所有信息目的是缩小范围,方便下面精确爬取信息
print('len:', len(ls)) # 打印一下看是否成功获取信息,0 的话代表爬取失败
file = codecs.open('./data/stock.csv', 'w', encoding='utf-8') # 打开事先创建的csv文件并赋值给file
if len(ls) > 0:
ls.pop(0) # 如果有信息删除第一行信息,因为第一行为名称,不需要
wr = csv.writer(file) # 将信息已csv的形式写入file中 即事先创建的stock.csv文件
wr.writerow(['code', 'name', 'lasttrade']) # 写入信息
for stock in ls:
code = stock.xpath("./td[1]/a/text()")[0] # 从列表中提取第一项 text() 代表选取a标签内的文字信息
name = stock.xpath("./td[1]/span/text()")[0]
lasttrade = stock.xpath("./td[2]/span/text()")[0]
print(code, name, lasttrade)
wr.writerow([code, name, lasttrade]) # 写入信息
file.close() # 关闭文件
except Exception as e:
print(e)