Skip to main content
 首页 » 编程设计

python之使用源代码不洁的 BeautifulSoup 从 HTML 表格中提取链接

2025年05月04日10think

我正在尝试从中文报纸数据库中抓取文章。这是一些源代码(粘贴摘录 b/c 键控站点):

<base href="http://huylpd.twinbridge.com.ezp-prod1.hul.harvard.edu/web\" /><html> 
<! -- <%@ page contentType="text/html;charset=GBK" %> 
<head> 
<meta http-equiv="Content-Language" content="zh-cn"> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> 
<meta name="ProgId" content="FrontPage.Editor.Document"> 
<title>概览页面</title> 
... 
</head> 
... 
</html>   
</html> 

当我尝试像这样直接抓取表格中的链接时:

import urllib, urllib2, re, mechanize 
from BeautifulSoup import BeautifulSoup 
br = mechanize.Browser(factory=mechanize.RobustFactory()) 
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')] 
br.set_handle_robots(False) 
 
url = 'http://huylpd.twinbridge.com.ezp-prod1.hul.harvard.edu/search?%C8%D5%C6%DA=&%B1%EA%CC%E2=&%B0%E6%B4%CE=&%B0%E6%C3%FB=&%D7%F7%D5%DF=&%D7%A8%C0%B8=&%D5%FD%CE%C4=%B9%FA%BC%CA%B9%D8%CF%B5&Relation=AND&sortfield=RELEVANCE&image1.x=27&image1.y=16&searchword=%D5%FD%CE%C4%3D%28%B9%FA%BC%CA%B9%D8%CF%B5%29&presearchword=%B9%FA%BC%CA%B9%D8%CF%B5&channelid=16380' 
page = br.open(url) 
soup = BeautifulSoup(page) 
links = soup.findAll('a') # links is empty =( 

Python 甚至没有在 html 中找到任何内容,也就是返回一个空列表。我认为这是因为源代码以base href 标签开头,而Python 只识别文档中的两个标签:base href 和html。

知道如何在这种情况下抓取链接吗?非常感谢!!

请您参考如下方法:

删除第二行让 BS 找到所有标签。我没有找到更好的方法来解析它。

page = br.open(url) 
page = page.read().replace('<! -- <%@ page contentType="text/html;charset=GBK" %>', '') 
soup = BeautifulSoup(page)