Python实现网络爬虫基础学习(二)

抓取新闻内文页面

我的上一篇讲了如何抓取新闻的时间、内容以及链接

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的文字

所以一定要活学活用


    

猜你喜欢

转载自blog.csdn.net/weixin_42280639/article/details/81183512
今日推荐