爬取网站:http://www.yc.ifeng.com/?cid=91002
爬取结果
首先我们来看看F12之后,要爬取的标签 table>tbody>tr>td 中的内容。有的还要更深层次的挖掘
首先我们先找到id为booklist的标签。一开始我再犹豫要不要一层一层来找。通过tbody>tr>td>a>...来找。但是最后都没成功(可能是我的技术的问题)。最后上网查了资料发现,其实没必要一层一层来。就直接找你想要的那个标签。例如我想找书名。
首先 main_tag=soup.find_all('div', id='book_list')#查找 id为 book_list 查找最外层
main_tag_list=main_tag[0].find_all('tr') #查找tr层 因为一会要循环。有多少行,就循环多少次
for name_item in it.find_all('td', class_='col-name'):
for name_i in name_item.find_all('a',class_='bookt'): #查找a标签,且类名是bookt
name_dict['name'] = name_i['title']#获取title
name_list.append(name_dict)
完整代码:
from urllib import request
from bs4 import BeautifulSoup as bs
resp=request.urlopen('http://www.yc.ifeng.com/?cid=91002')
html_data=resp.read().decode()
soup=bs(html_data, 'html.parser')
main_tag=soup.find_all('div', id='book_list')#查找 id为 book_list
main_tag_list=main_tag[0].find_all('tr')
#main_tag_list=main_tag.tbody.children
type_list=[]#类型列表
name_list=[]#书名列表
author_list=[]#作者列表
book_state_list=[]#图书状态
update_time_list=[]#更新事件
for it in main_tag_list:
type_dict = {}
name_dict = {}
author_dict = {}
update_time={}
book_state={}
for name_item in it.find_all('td',class_='col-time'):#查找td 且类名为col-time
update_time['update_time']=name_item.text #获得内容
update_time_list.append(update_time)
for name_item in it.find_all('td',class_='col-state'):
book_state['book_state']=name_item.text
book_state_list.append(book_state)
for name_item in it.find_all('td',class_='col-type'):
for type_i in name_item.find_all('a'):
type_dict['type']=type_i['title'] #获得标签里的内容
type_list.append(type_dict)
for name_item in it.find_all('td', class_='col-name'):
for name_i in name_item.find_all('a',class_='bookt'):
name_dict['name'] = name_i['title']
name_list.append(name_dict)
for name_item in it.find_all('td', class_='col-author'):
for author_i in name_item.find('a'):
author_dict['author'] = author_i
author_list.append(author_dict)
print("---------------------------------------------------------------")
print(len(type_list))
for i in range(len(type_list)):
print(type_list[i],name_list[i],author_list[i],update_time_list[i],book_state_list[i])
print("---------------------------------------------------------------")