You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多页网页爬取输出异常:代码正常但无内容写入文件

嘿,我来帮你排查下这个问题!你的代码跑起来没报错但输出文件空空如也,大概率是几个小细节没处理到位,咱们一个个来解决:

1. 分页链接的正则表达式写得有问题

你原代码里的正则用来匹配分页链接,但写法太冗余还容易出错,比如.http://里的点是正则的“任意字符”,完全没必要这么写。其实只需要匹配带page=参数的链接就行,修正后的正则更简洁准确:

page_count_links = soup.find_all("a", href=re.compile(r".*page=\d+"))

不过你后面手动生成了前3页的URL列表,这个问题暂时没影响输出,但修正后能正确获取总页数,避免后续逻辑出错。

2. 表格行的选择器可能不匹配

你用find_all('tr', align='center')定位表格行,但很可能目标页面里的表格行并没有align='center'这个属性,导致找不到任何行。建议先打印soup_new.prettify()看看页面实际结构,确认表格的正确定位方式。比如可以先找到目标表格(比如带特定class的),再去取行:

# 假设表格有class="table-data",根据实际页面调整
table = soup_new.find('table', class_='table-data')
if table:
    for tr in table.find_all('tr')[1:]:  # [1:]是跳过表头行
        stack = []
        for td in tr.find_all('td'):  # 规范写法用find_all,而非findAll
            stack.append(td.text.replace('\n', '').replace('\t', '').strip())
        acct.write(", ".join(stack) + '\n')

3. 缺失请求头导致返回空页面

很多网站会拦截无浏览器标识的请求,你直接用requests.get()的默认请求头,可能被识别为爬虫,返回的页面没有表格内容。所以需要添加User-Agent模拟浏览器访问:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
# 所有请求都带上这个headers
r = rq.get(base_url, headers=headers)
# ...
r_new = rq.get(url_, headers=headers)

4. 文件写入模式的编码问题

你用wb二进制模式写入字符串,容易出现编码混乱或者写入失败的情况,换成文本模式并指定编码更稳妥:

with open("results.txt", "w", encoding='utf-8') as acct:

整合后的完整代码

from bs4 import BeautifulSoup as bsoup
import requests as rq
import re

base_url = 'http://www.creationdentreprise.sn/rechercher-une-societe?field_rc_societe_value=&field_ninea_societe_value=&denomination=&field_localite_nid=All&field_siege_societe_value=&field_forme_juriduqe_nid=All&field_secteur_nid=All&field_date_crea_societe_value='
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

# 初始请求获取分页信息
r = rq.get(base_url, headers=headers)
soup = bsoup(r.text, 'html.parser')  # 显式指定解析器更稳妥

# 修正分页链接匹配正则
page_count_links = soup.find_all("a", href=re.compile(r".*page=\d+"))
try:
    num_pages = int(page_count_links[-1].get_text())
except IndexError:
    num_pages = 1

# 生成要爬取的URL列表(这里取前3页,你可以改成range(1, num_pages+1))
url_list = ["{}&page={}".format(base_url, str(page)) for page in range(1, 3)]

# 写入文件
with open("results.txt", "w", encoding='utf-8') as acct:
    for url_ in url_list:
        print("Processing {}...".format(url_))
        r_new = rq.get(url_, headers=headers)
        soup_new = bsoup(r_new.text, 'html.parser')
        
        # 先定位目标表格(根据实际页面调整class或其他属性)
        target_table = soup_new.find('table')  # 如果只有一个表格可以直接用这个,否则加class
        if not target_table:
            print(f"No table found on {url_}")
            continue
        
        # 遍历表格行,跳过表头(假设表头是第一行)
        for tr in target_table.find_all('tr')[1:]:
            stack = []
            for td in tr.find_all('td'):
                # 清理文本内容
                text = td.text.replace('\n', '').replace('\t', '').strip()
                stack.append(text)
            # 写入一行,用逗号分隔
            acct.write(", ".join(stack) + '\n')

如果还是没内容,建议在循环里打印soup_new.prettify()看看返回的页面结构,确认表格的位置和属性,再调整选择器就好啦!

内容的提问来源于stack exchange,提问作者Haalanam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:01:47