爬百度实时热点top10的排序,标题内容,链接
import requests
from lxml import etree
headers={
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
urls='http://top.baidu.com/buzz?b=1'
res=requests.get(url=urls,headers=headers)
##乱码情况下查看网页文本的编码格式
res.encoding='gb2312'
获得元素树
html=etree.HTML(res.text)
##取top10
##获取table下的[1,14]tr标签:
##第一个没用
##我们要找的是:class="hideline"结点下的’td[@class="first"和 td[@class="keyword
所以前1-3个中多了3个没用的tr标签,所以取[1:14]
contents=html.xpath('//table[@class="list-table"]//tr')[1:14]
print(contents)
#遍历所有tr标签
rank_list=[]
content_list=[]
href_list=[]
import csv
for tr in contents:
##取想要的数据
rank=tr.xpath('td[@class="first"]//text()')
##判断有没有空的数据
if rank :
rank_list.append(rank[1])
content=tr.xpath('td[@class="keyword"]//a/text()')
if content:
content_list.append(content[0])
href=tr.xpath('td[@class="keyword"]//a/@href')
if href:
href_list.append(href[0])
print(rank_list)
print(content_list)
print(href_list)
将数据存入csv文件中:
import csv
with open('h.csv','w')as f:
f_csv = csv.writer(f)
f_csv.writerow(['排行','标题','链接'])
for i in range(10):
rows=[[rank_list[i],content_list[i],href_list[i]],]
f_csv.writerows(rows)