Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析结构糟糕的HTML?_Python_Python 2.7 - Fatal编程技术网

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']

所以,我想做的是创建一个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'] # 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)