中信证券资管产品板块网址:http://www.cs.ecitic.com/newsite/cpzx/jrcpxxgs/zgcp/
页面截图如下:
目标:抓取上图中红框内的所有资产信息
按F12进入开发者工具模式,在Elements板块下,在搜索框内输入“//ul[@class=“list-con”]/li",匹配ul列表里的所有资管产品的li标签,如图:
抓取单页数据,源码如下:
import requests
from lxml import etree
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
url = 'http://www.cs.ecitic.com/newsite/cpzx/jrcpxxgs/zgcp/index.html'
res = requests.get(url, headers=headers)
res.encoding = res.apparent_encoding
data = res.text
tree = etree.HTML(data)
# 获取每个li标签
li_lst = tree.xpath('//ul[@class="list-con"]/li')
i = 1
for li in li_lst:
print(str(i)+'.', ', '.join(li.xpath('./span/text()')))
i += 1
运行结果如下:
本案例只抓取第一页的资管产品信息,如果想抓取多页,可以自行修改代码。
抓取多页数据,源码如下:
import requests
from lxml import etree
headers = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 定义一个函数,抓取每页的数据
def get_page(page_url):
res = requests.get(page_url, headers=headers)
res.encoding = res.apparent_encoding
data = res.text
tree = etree.HTML(data)
# 获取每个li标签
li_lst = tree.xpath('//ul[@class="list-con"]/li')
i = 1
for li in li_lst:
print(str(i) + '.', ', '.join(li.xpath('./span/text()')))
i += 1
# 抓取前4页的数据
for page_n in range(4):
# 格式化资管产品的页面网址
page_url = f'http://www.cs.ecitic.com/newsite/cpzx/jrcpxxgs/zgcp/index_{page_n}.html'
# 第一页的资管产品网址
if page_n == 0:
page_url = 'http://www.cs.ecitic.com/newsite/cpzx/jrcpxxgs/zgcp/index.html'
print(f'第{page_n + 1}页资管产品:')
get_page(page_url)
运行结果如下:
思考:如果抓取任意页数的数据,可以参考如下代码。
# 定义一个页数变量
page_num = input('请输入要抓取的页数: ')
把抓取多页源码的range()内的数字替换为page_num,要转成整型数据int(page_num)。
.....