Python爬虫入门:爬虫抓取沪深300指数列表

news/2024/10/17 22:24:45/

使用Python3爬取沪深300指数列表

1. 思路分析

用chrome打开维基百科沪深300的页面,网址为:https://en.wikipedia.org/wiki/CSI_300_Index 。如下图一所示,可见沪深300指数股票列表。其中,包含了股票代号、公司名,交易所名称,权重和所属行业。这个列表所包含的信息就是我们所需要的。我们在向浏览器发送请求的时候,返回的是html代码,平时用浏览器浏览网页看到的这些图文并茂的规整的页面其实是html代码在经过浏览器渲染后的结果。所以,我们需要找到我们所需要抓取的信息在html代码中的位置,这个就是html解析了。解析的工具很多,作为资深小白,这里笔者选用正则表达式直接分析抓取信息。之所以没有使用成熟的Beautifulsoup4,Xpath等解析包,更多的是作为小白,从正则表达式入手更能体现抓取过程和抓取原理。这里,之后不妨大家试一试使用成熟解析包BS4之类的尝试一下。

图1 沪深300指数列表

 

如何找到html中需要抓取的信息呢?可以在页面右键,打开网页源代码(Ctrl+U),可以查看到列表中的信息定位如下:

图2 列表信息定位

一个网页的html代码全部打开看上去会非常的繁多,其实html代码是一层一层结构化的,非常规整的。每一对尖括号包起来的是一个标签,比如这里的<tr>…</tr>表示一行,<td>…</td>表示一个空格。

2. 代码实现

(1)首先定义网址url,确定好要爬取的入口链接。

(2)然后获取浏览器信息,设置header信息等模拟浏览器进行访问(这一步可省略,此处没有屏蔽)。

(3)用urllib发送请求,爬取整个网页源代码。

(4)根据要爬取的信息构建正则表达式,如爬取股票代号列表,则采用'<td>(\d{6})'的正则表达式。

(5)采用构建的正则表达式提取相应的信息。

(6)存储爬取到的信息。

完整代码如下:

import pandas as pd
import re
import urllib.request
import tushare as ts
import osindex_list=[]
index_list1=[]
company_list=[]
stock_exchange_list=[]
weighting_list=[]
segment_list=[]url = "https://en.wikipedia.org/wiki/CSI_300_Index"headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]urllib.request.install_opener(opener)
file=urllib.request.urlopen(url)
data=str(file.read())pat='<table class="wikitable sortable">(.*)<h2><span class="mw-headline" id="Sub-Indicies">Sub-Indicies</span><span class="mw-editsection">'#<\/todday><\/table>'
data1= str(re.compile(pat).findall(data))
csi_1='<tbody><tr>(.*)<\/td><\/tr><\/tbody><\/table>'
csi = str(re.findall(csi_1,data1,re.S))hang = '<tr>(.*?)<\/td><\/tr>|<\/td><\/tr><\/tbody><\/table>'
zhenghang = re.findall(hang,csi)for i in range(len(zhenghang)):index_1='<td>(\d{6})'company_1='<td><a href="/.*?" title=".*?">((\w|\s|&|(|)|-){1,100})</a>'stock_exchange_1='<td>(Shanghai|Shenzhen)'weighting_1='<td>(\d,\d{1,2})'segment_1='<td>(Financials|Consumer Staples|Consumer Discretionary|Utilities|Industrials|Health Care|IT|Energy|Materials|Telecommunication Services)'index_list.extend(re.findall(index_1,zhenghang[i]))company_list.extend(re.findall(company_1,zhenghang[i]))stock_exchange_list.extend(re.findall(stock_exchange_1,zhenghang[i]))weighting_list.extend(re.findall(weighting_1,zhenghang[i]))segment_list.extend(re.findall(segment_1,zhenghang[i]))test =pd.DataFrame(columns=name,data=index_list)
#存储
test.to_csv('H:/day/index1.csv')

 

3.爬取结果

 

 

 


http://www.ppmy.cn/news/533611.html

相关文章

WL2801E18-5/TR CMOS线性稳压器WL2801E30-5/TR WL2801E33-5/TR

WL2801E 低噪声&#xff0c;高PSRR&#xff0c;高速&#xff0c;CMOS LDO 说明 WL2801E系列是一款高精度&#xff0c;低噪声&#xff0c;高速&#xff0c;低压差CMOS线性稳压器高纹波抑制。这些设备提供了新的水平 在手机&#xff0c;笔记本电脑中具有成本效益和笔记本电脑&…

[Java面试三]JavaWeb基础知识总结.

1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。 l Internet上供外界访问的Web资源分为: • 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。 • 动态web资源:指web页面中供人…

checkbox全选和取消,附带单击表格tr选中功能

<html> <head> test </head> <body> <table width"300px" border"1"><tr><th><input type"button" style"display:block" id"selectAll" value"全选"><input…

基于Linux内核红黑树的TR069参数解析工具:树形结构+CPE RPC支持

目录 tr069_oid.h tr069_oid.c demo.c tr069_oid.h /* Dependencies ------------------------------------------------------------------------------------------------------*/#ifndef __CPE_OID_REG_H #define __CPE_OID_REG_H 1#include "easy_macros.h" …

【HTML】表格标签(table,tr,td)

* 表格的主要作用是什么&#xff1f;表格主要作用是布局可以先将表格画出来,然后往表格中放入数据现代的网页布局采用table比较少&#xff0c;采用div布局比较多* 表格相关语法&#xff1a; 1. 表格是table标签 2. border是table标签的一个属性&#xff0c;border是属性名,1px是…

TR-069 Device:2.11 Root Object definition, tr-181-2-11-0.xml

https://cwmp-data-models.broadband-forum.org/tr-181-2-11-0.html#R.TR-098 目录 License Summary Table of Contents Data Types References License Copyright (c) 2010-2017, Broadband Forum Redistribution and use in source and binary forms, with or withou…

Table动态添加数据实现tr滚动

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>滚动表格实例</title> <!--css样式是锁定表头不动的--> <style type"text/css"> .table { width: 100%; left: 30%; border-collapse: coll…

表格标签 table标签 tr标签 单元格间距 单元格居中加粗 表单居中

table标签 table标签是表格标签 用这个可以创建一个表格 在标签中可以设置表格的相关属性 tr标签和td标签 一个<tr></tr>标签代表一行 一个<td></td>代表一个单元格&#xff08;一行中的一个元素&#xff09; width hight是css样式 控制表的高和宽 bor…