全球电影票房排行榜也是一个经常被用来讲网络爬虫的实例。我们同样用中国大学排名的代码,修改一下来爬取相应内容。
打开网页链接: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()
运行结果如下:
极域电子教室座位表程序下载链接:链接:https://pan.baidu.com/s/1X0WUTtXmr1EhFg9CNgoIKA?pwd=odvs
提取码:odvs
考试指令系统下载链接:https://pan.baidu.com/s/11x9fS1gUEPCd6w15KHCxSw?pwd=zvw3
提取码:zvw3
照片插入电子表格程序链接:https://pan.baidu.com/s/1dvW5q9G53prkUDVcO6uffA?pwd=w3jp
提取码:w3jp