获取网页中的表格并存储为csv

本文介绍了如何使用Python的requests库获取网页内容,通过BeautifulSoup解析HTML,提取表格数据,然后利用正则表达式和pandasDataFrame结构,将数据存储为CSV文件的过程。
摘要由CSDN通过智能技术生成

获取网页中的表格并存储为csv

0、需要用到的包

import requests
from bs4 import BeautifulSoup
import re
import pandas as pd

1、请求网页并获取内容

# 发送 GET 请求并获取响应
response = requests.get('https:xxxxxxx')
# 将内容存储
text = response.text
soup = BeautifulSoup(text, "lxml")

2、获取表格内容

# 获取表格
tables = soup.find_all("table")
# 提取第一个表格的数据
data1 = tables[0].extract()

这里我感兴趣的内容有两种形式:
(1)<td></td>中的<strong>中的标题和<i>中的内容
在这里插入图片描述
(2)<td></td>中的<a>中的网页链接和标题和<i>中的内容
在这里插入图片描述
3、准备提取工作

# 提取所有的相关内容,得到每个<td></td>内容
related_content = data1.find_all('td')
# 通过内容信息,构造相应的正则表达式
pattern1 = r'<strong>(.*?)</strong>'
pattern2 = r'<a href="(.*?)" target="_blank">(.*?)</a>'
pattern_c = r'<i>\n                        \n                            (.*?)\n                        \n                    </i>'
# 创建一个dataframe,用于存储需要的信息
mydataframe1 = pd.DataFrame(columns=['title', 'content', 'link'])

4、提取特征并存储到dataframe中

for i in range(len(related_content)):
    fs = related_content[i].find('strong')  # 寻找标识
    fi = related_content[i].find('i')
    fa = related_content[i].find('a')
    if(fs == None and fa == None):   # 如果fs和fa都没有,则continue
        continue
    if(fs != None):  # 如果有fs
        match_title = re.search(pattern1, str(fs))
        match_c = re.search(pattern_c, str(fi))
        cur_title_cnt = match_title.group(1)
        cur_content_cnt = match_c.group(1)
        cur_length = len(mydataframe1)
        mydataframe1.loc[cur_length] = [cur_title_cnt, cur_content_cnt, None]
    else:
        match_title = re.search(pattern2, str(fa))
        match_c = re.search(pattern_c, str(fi))
        cur_link_cnt = match_title.group(1)
        cur_title_cnt = match_title.group(2)
        cur_content_cnt = match_c.group(1)
        cur_length = len(mydataframe1)
        mydataframe1.loc[cur_length] = [cur_title_cnt, cur_content_cnt, cur_link_cnt]
# 保存第一个表格
mydataframe1.to_csv('xxxxx.csv', index=False)

在实际运用中,需要根据实际获得的网页数据和目标需求调整find和match的信息。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是代码实现: ```python import requests import csv from bs4 import BeautifulSoup # 设置请求头,防止被网站拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 请求网页 url = 'http://datachart.500.com/ssq/history/newinc/history.php?limit=100000&sort=0' response = requests.get(url, headers=headers) # 解析网页 soup = BeautifulSoup(response.text, 'html.parser') trs = soup.select('table tr') # 将数据写入csv文件 with open('shuangseqiu.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) for tr in trs[2:]: tds = tr.select('td') row = [tds[0].text.strip()] for td in tds[1:7]: row.append(td.text.strip()) row.append(tds[7].text.strip().replace(',', ' ')) row.append(tds[8].text.strip()) writer.writerow(row) print('数据已写入csv文件!') ``` 上面的代码,我们首先使用 requests 库发送 GET 请求,获取到了双色球历史开奖记录的网页。然后使用 BeautifulSoup 库解析网页,找到开奖记录所在的表格,并循环遍历表格的每一行,将开奖记录提取出来,并写入到 csv 文件。 注意,我们在设置请求头时使用了一个模拟浏览器的 User-Agent,这是为了防止被网站拦截。同时,我们在写入 csv 文件时,将千位分隔符逗号去掉,避免出现格式错误。 最后,运行代码即可得到一个名为 shuangseqiu.csvcsv 文件,里面存储了所有的双色球历史开奖记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值