爬虫之爬取新闻列表
爬虫之爬取新闻列表
爬取标题-链接链接-时间时间
爬取标题
很久前就尝试了爬虫学习,但是一直没有怎么去实际工作中使用过,这段时间工作上的事也稍微少了点,就来写写爬虫的东西**
本次使用的模块:
BeautifulSoup4,requests
可以看到,新闻的链接为:
https://news.sina.com.cn/world/
而且使用的是get方法
在源码中观察到,新闻有一个class属性为’news-item’
所以,可以通过该属性找到下面我们所需要的
import requests
from bs4 import BeautifulSoup
res = requests.get('https://news.sina.com.cn/world/')
res.encoding='utf-8'
# print(res.text)
#soup为列表形式,内容存放在soup中,
soup = BeautifulSoup(res.text,'html.parser')
# 查找class值为news-item的元素内容
new_itme = soup.select('.news-item')
for news in new_itme:
print(news)
结果中可以看到,news中包含了很多标签等多余的东西,所以需要去掉这些,
#标题文字在h2标签下,使用[0]去掉中括号,筛选出标题文字
character = news.select('h2')[0].text
#链接在a标签下,同理,获取href的值
link = news.select('a')[0]['href'] #筛选出class为值为time的,拿到时间
time = news.select('.time')[0].text
且在取出标签时,发现有的值为空,所以加载判断一下:
#因为获取的内容有标签等不需要的东西,所有去掉,根据观察所得:链接存在
a标签下标签下
if len(news.select('h2')) > 0:
# if news.select('h2') != []:
#文字在文字在h2下面:下面:
character = news.select('h2')[0].text
link = news.select('a')[0]['href'] time = news.select('.time')[0].text
完整获取到新闻标题-链接-时间代码如下:
import requests
from bs4 import BeautifulSoup
res = requests.get('https://news.sina.com.cn/world/')
res.encoding='utf-8'
# print(res.text)
soup = BeautifulSoup(res.text,'html.parser')
# 查找class值为news-item的元素内容
new_itme = soup.select('.news-item')
for news in new_itme:
# print(news)
#因为获取的内容有标签等不需要的东西,所有去掉,根据观察所得:链接存在
a标签下标签下
if len(news.select('h2')) > 0:
# if news.select('h2') != []:
#文字在文字在h2下面:下面:
character = news.select('h2')[0].text
link = news.select('a')[0]['href'] time = news.select('.time')[0].text
print(character,':',link,time)
最后,我们把抓取的东西放入excel中,以下是添加了excel的完整代码:
import requests
from bs4 import BeautifulSoup
import os
from openpyxl import workbook
from openpyxl import load_workbook
res = requests.get('https://news.sina.com.cn/world/')
res.encoding='utf-8'
# print(res.text)
soup = BeautifulSoup(res.text,'html.parser')
# 查找class值为news-item的元素内容
new_itme = soup.select('.news-item')
if os.path.exists('新浪.xlsx') == False:
wb = workbook.Workbook() # 创建一个excel用来保存抓取的内容
wb.create_sheet('新浪国际新闻')
wb.save('新浪.xlsx')
wb.close()
wb = load_workbook('新浪.xlsx') #打开工作簿
sheet = wb['新浪国际新闻'] row = 0 #设置初始行数
for news in new_itme:
# print(news)
#因为获取的内容有标签等不需要的东西,所有去掉,根据观察所得:链接存在
a标签下标签下
if len(news.select('h2')) > 0:
row += 1
# if news.select('h2') != []:
#文字在文字在h2下面:下面:
character = news.select('h2')[0].text
link = news.select('a')[0]['href'] time = news.select('.time')[0].text
sheet.cell(row,1).value = character
sheet.cell(row,2).value = link
sheet.cell(row,3).value = time
wb.save('新浪新浪.xlsx')
wb.close()
结果图我就不放了,,大家可以自己试试,结果图会变
作者:saber_sss