《python网络爬虫和信息提取》:全球电影票房排行榜(附更改后的代码) |
您所在的位置:网站首页 › 全球电影票房榜总榜 › 《python网络爬虫和信息提取》:全球电影票房排行榜(附更改后的代码) |
全球电影票房排行榜也是一个经常被用来讲网络爬虫的实例。我们同样用中国大学排名的代码,修改一下来爬取相应内容。
打开网页链接:http://www.piaofang.biz/,先来观察页面结构: 下面我们再来分析网页源代码: 1、网页中有"body"和"table"标签,没有"tbody"标签 。 2、有一个包含“排名”、“电影名”等六项内容的表头的“tr"子标签。 3、相比第2名,在第1名的子标签内,第1名前多了“全球电影票房排行榜”几个字。11名、21名好像也是一样。 4、阿凡达前也是有一个“a"标签。 5、 第10名和11名之间有一行空行。 解决思路: 1、对于空行问题。 增加一个if语句,判断列表长度是否为6。 2、表头和内容标签层级数不同,用“ulist.append()”时会出错,可以用“try-except"语句来解决。 3、第1名及第11名前的“全球电影票房排行榜”,用strip()来解决。 修改后的代码如下: import requests import bs4 from bs4 import BeautifulSoup def getHTML_Text(url): try: kv = {'User-Agent':'Mozilla/5.0'} r = requests.get(url,timeout = 20 ,headers = kv) r.raise_for_status() # print('是否=200',r.status_code) #如果状态不是200,则产生网络访问异常 r.encoding = r.apparent_encoding # print(r.request.headers) # 如不能正常访问网络,可参考其中内容修改kv中的信息。 return r.text except: return '网络打开异常!' def fillList(ulist,html): soup = BeautifulSoup(html,'html.parser') for tr in soup.find('table').children: # 网页上没有‘tbody’标签,用‘body’也不能成功。 if isinstance(tr,bs4.element.Tag): tds = tr('td') # print('tds=', tds) if len(tds)>=6: # 去掉空列表,以防出错“list index out of range” try: ulist.append([tds[0].text.strip('全球电影票房排行榜'),tds[1]('a')[0].string,tds[2].string,tds[3].string,tds[4].string,tds[5].text]) # strip('全球电影票房排行榜')用于删除第一名的前缀,用text代替string,防止下行出现“unsupported format string passed to NoneType.__format__” except: ulist.append([tds[0].string, tds[1].string, tds[2].string, tds[3].string, tds[4].string,tds[5].string]) # 提取标题 else: pass # print(ulist) def print_all_result(ulist,num): tplt = "{0:>6}\t{1:{6}^18}\t\t{2:^6}\t{3:{6}^6}\t{4:{6}^16}\t{5:{6}>8}" for i in range(num): u = ulist[i] print(tplt.format(u[0].strip(),u[1].strip(),u[2].strip(),u[3].strip(),u[4].strip(),u[5].strip(),chr(12288))) def main(): url = 'http://www.piaofang.biz/' html = getHTML_Text(url) result = [] fillList(result,html) print_all_result(result,21) if __name__ == '__main__': main()运行结果如下:
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |