抓取新闻内文页面
我的上一篇讲了如何抓取新闻的时间、内容以及链接
import requests
from bs4 import BeautifulSoup
res = requests.get("http://www.ggj.gov.cn/xwzx/tpxw/") # 请求 获取国管局信息
res.encoding = "utf-8"
soup = BeautifulSoup(res.text, "html.parser") # 抓取出国管局网页面信息
for l in soup.select('body > div.mainbox.boxcenter > dl.listbox.boxcenter'): # 抓取新闻资讯
s = l.select("a") # 抓取出a标签的文本信息
a = l.select('a') # 找出a标签下的文本对应的链接
time = l.select('i')#找出带i标签的时间
for i in range(len(s)):#因为得到的结果是一个list,所以需要解开list,获取资讯条数进行循环输出资讯的内容
s1 = s[i].text#获取内容的文本,逐条显示
a1 = a[i]['href']#获取链接
t1 = time[i].text#获取时间
print(t1, s1, a1)#打印
下面我们开始文章内页数据的抓取
1、标题,打开浏览器调试工具,点击元素观测左上角按键copy selector,复制到eclipse中
2、取出时间由于时间不可以直接使用复制选择器,所以先选择时间所在的大模块,然后在看这个时间在list的第几个元素,取出
由于我们取得的时间是一个字符串,但是当我们要把时间上传到数据库时,需要将其改为时间的类型,datetime所以,此时我们要学会对时间格式进行修改,这时候就需要引用到时间的库from datetime import datetime,字符串转换为时间需要用到strptime-------dt=datetime.strptime(t2, "%Y-%m-%d %H:%M"),%Y-%m-%d也可以在后面添加年月日:%Y年-%m月-%d日;而时间转字符串用strftime,dt.strftime("%Y-%m-%d"):
import requests
from bs4 import BeautifulSoup
res = requests.get(
"http://www.ggj.gov.cn/xwzx/tpxw/201806/t20180629_23583.htm")
# 请求 获取国管国管局举办“我与改革开放同行”主题分享会纪念中国共产党成立97周年局信息
res.encoding = "utf-8"
soup = BeautifulSoup(res.text, "html.parser") # 抓取出国管局网页面信息
# print(soup)
bt = soup.select("body > div.mainbox.boxcenter > h1")[
0].text # 抓取出title标题信息
time = soup.select("body > div.mainbox.boxcenter > dl > dt")
# print(time)
from datetime import datetime
for t in time:
t0 = t.select("span")[0].text # 来源
t1 = t.select("span")[1].text # 链接
t2 = t.select("span")[2].text # 时间
dt = datetime.strptime(t2, "%Y-%m-%d %H:%M")
print(" ", bt)
print("时间:", dt)
3、来源的处理与时间相差不大,只是我这篇页面现在对于来源出现了一点问题,但是个人认为原理是相差不大的,我会继续学习
但是python中打印出来却无来源信息
4、整理新闻内页
方法一:
print(' '.join([w.text.strip() for w in soup.select("body > div.mainbox.boxcenter > div.conbox.boxcenter > div > div")]))
方法二:
for w in soup.select("body > div.mainbox.boxcenter > div.conbox.boxcenter > div > div"):
# 使用strip可以去除所取得的text前面或者中间内容中的换行符等,如:\n
article.append(w.text.strip())
# print(article)
# 进行合并
print(' '.join(article)) # 将文章内容合并,分段显示
方法三:
for w in soup.select("body > div.mainbox.boxcenter > div.conbox.boxcenter > div > div"):
for i in range(len(w.select('.MsoNormal'))):
print(w.select('.MsoNormal')[i].text)
以上方法其实还是需要自己理解,也可以加入自己的想法,这样更方便于学习
5、当一个新闻资讯有责任编辑时抓取责任编辑人操作,其实方法都是相通的,我们找一个有责任编辑人的页面
# 责任编辑人
import requests
from bs4 import BeautifulSoup
res = requests.get(
"http://news.sina.com.cn/c/2018-07-24/doc-ihftenhz3270493.shtml")
res.encoding = "utf-8"
soup = BeautifulSoup(res.text, "html.parser")
bj = soup.select(".show_author")[0].text
print(bj)
# 如果不想要责任编辑几个字从左边开始不要就在strip前加l,就是lstrip
b2 = soup.select(".show_author")[0].text.lstrip('责任编辑:')
print(b2)
知道了lstrip功能后就可以删去之前抓取的页面中的showtitle的文字
所以一定要活学活用