Python 解析结构糟糕的HTML?
所以,我想做的是创建一个Python函数,它允许我在我想下载的播客的年、月、日传递它。然后它将解析HTML并返回当天播客的链接。例如:Python 解析结构糟糕的HTML?,python,python-2.7,Python,Python 2.7,所以,我想做的是创建一个Python函数,它允许我在我想下载的播客的年、月、日传递它。然后它将解析HTML并返回当天播客的链接。例如: >>> get_download_links(year, month, day) ['https://www.tytnetwork.com/?tytpm=44279&type=audio', # Hr 1 (audio) 'https://www.tytnetwork.com/?tytpm=44277&type=audio']
>>> get_download_links(year, month, day)
['https://www.tytnetwork.com/?tytpm=44279&type=audio', # Hr 1 (audio)
'https://www.tytnetwork.com/?tytpm=44277&type=audio'] # Hr 2 (audio)
我试图解析的页面是
以下是每月第一周的示例(包括工作日标签):
2014年6月
周一
星期二
结婚
清华大学
星期五
2.
3.
4.
5.
6.
我尝试过使用BeautifulSoup,但问题是页面结构太差,似乎没有办法实现我想要的
现在,我将把这个问题交给这里的Python大师来帮助我。导入请求
import requests
import bs4
import re
url = "http://www.tytnetwork.com/annual-archives/{year}-main-show-archives/"
def getPodCasts(m,d,y):
my_url = url.format(year=y)
print my_url
soup = bs4.BeautifulSoup(requests.get(my_url,headers={'User-agent': 'Mozilla/5.0'}).content)
calendar_row_for_month=soup.findAll(text=re.compile("^%s.*%s"%(m,y)))[0].parent.parent.parent
for sib in calendar_row_for_month.findNextSiblings():
if ">%02d<"%d in str(sib):
break
assert ">%02d<"%d in str(sib), "Error Date %s/%s/%s Not Found"%(m,d,y)
audios = sib.find(text="%02d"%d).next.next
return re.findall('https?:[^" ]*',str(audios))
print getPodCasts("June",12,2014)
进口bs4
进口稀土
url=”http://www.tytnetwork.com/annual-archives/{year}-主要展会档案/
def GetPodcast(m、d、y):
我的url=url.format(年份=y)
打印我的url
soup=bs4.BeautifulSoup(requests.get(my_url,headers={'User-agent':'Mozilla/5.0'}).content)
日历行(用于月=soup.findAll(text=re.compile(“^%s.*%s”%(m,y)))[0].parent.parent.parent
对于月的日历行中的sib。FindNextSibles():
如果“>%02d%02dI假设您有一个帐户并且已经处理了身份验证部分?@merlin2011是的,当然。:DBefore”将其交给Python专家“:请尽力构造一个可以脱机运行的最小示例,该示例只包含您在解析时遇到困难的HTML的相关片段,以及您尝试这样做的过程。@LukasGraf我考虑过,但我需要解析的HTML超过4000行(是的,仅包含相关部分),这个问题最好是通过网站的图形版本来理解的,而不是HTML。当我尝试通过浏览器以外的任何方式访问时,我会被禁止使用403。。。我要花一个星期的时间来仔细研究这一切,弄清楚它到底有什么作用。谢谢!;)
import requests
import bs4
import re
url = "http://www.tytnetwork.com/annual-archives/{year}-main-show-archives/"
def getPodCasts(m,d,y):
my_url = url.format(year=y)
print my_url
soup = bs4.BeautifulSoup(requests.get(my_url,headers={'User-agent': 'Mozilla/5.0'}).content)
calendar_row_for_month=soup.findAll(text=re.compile("^%s.*%s"%(m,y)))[0].parent.parent.parent
for sib in calendar_row_for_month.findNextSiblings():
if ">%02d<"%d in str(sib):
break
assert ">%02d<"%d in str(sib), "Error Date %s/%s/%s Not Found"%(m,d,y)
audios = sib.find(text="%02d"%d).next.next
return re.findall('https?:[^" ]*',str(audios))
print getPodCasts("June",12,2014)