python爬虫新闻的学习笔记


刚开始查到的资料都是用正则。。主要我是小白,啥都不太懂

后来发现一个神器,beautifusoup


主要目的是:爬取news.xidian.edu.cn中一部分新闻内容,以标题,内容的形式保存到csv里


大概步骤如下,

1. 我所要获取的主页面是news.xidian.edu.cn,首先我应该先爬取下整个页面

import requests
res = requests.get('http://news.xidian.edu.cn/')
res.encoding='utf-8'


2. 利用beautifusoup来对这个页面进行“模式化”(模式化我自己取的名字)

    模式化的意思就是 对这个爬取下来的html内容进行一定的操作,使得soup有一定的格式,可以通过print来看一下。这种格式它可以直接通过select('')来获取内容。

soup = BeautifulSoup(res.text,'html.parser')


3. 模式化后,我就要分析我要提取的内容的标签有什么特征,这边我要提取的是标签中有‘_content_left_bottom_right '的内容

    这边要注意的是,我提取出来的wholenews是列表list的形式,它不可以直接在用select,我就在这边犯了好多错误。

wholenews = soup.select('.content1_left_bottom_right')


4.提取出了我需要的内容,但是分析网页源代码发现,我要提取的东西是在wholenews中以li形式存在的。但是又不能直接提取wholenews

   自己想了个办法,可不可以先把wholenews变成和第二步中res.text的形式,然后在模式化,最后select('li'),这种方法不知道对不对。。只能试试了,可能有更好的办法。

newsoup = BeautifulSoup(str(wholenews),'html.parser')
newlist = newsoup.select('li')

5. 提取出来的newlist也是一个列表的形式,里面有很多数组,这样的话,我就可以采用for循环,来一条一条提取内容。

    一定要结合自己要爬取网页的代码!

for news in newlist:  #news 是newlist重的每一项,可以用select
    a = news.select('a')
    a2 = a[1].text
    link = a[1]['href']
    if (len(link) <=21):
        turelink = 'http://news.xidian.edu.cn/' + link
    else:
        turelink = link
    print('标题: '+a2)

6. 上面标题就已经被提取出来啦。然后我要进入各个页面,今天每一个标题下的内容的提取。

    首先前面已经把url给分析出来了,这样我就可以再利用第一步,先把第一个子页面的所有内容爬下来

reslist = requests.get(turelink)
    reslist.encoding='utf-8'
    souplist = BeautifulSoup(reslist.text,'html.parser')


7. 爬下整个页面后,我需要继续分析源代码,爬内容。

    再次说明。一定要结合自己所爬网页的代码!

alltext = souplist.select('#wz_zw') #一个列表
    neirongsoup = BeautifulSoup(str(alltext), 'html.parser')
    neironglist = neirongsoup.select('p')
    lenp = len(neironglist)

    print("内容:")
    wn = ''
    for i in range(lenp):
        n = neironglist[i].text
        wn = str(wn) +str(n)
    print(wn)


运行发现,OK,当然对于小白来讲,真的是失败了很多次,测试了很多次,感觉代码的优化性也不是很好。。暂且先这样吧


8.最后我还想把东西保存到csv里,写了个保存的def,然后全部代码的最后调用store函数。

import codecs
csvfile = open('xidian1.csv','w',newline='')
writer = csv.writer(csvfile)

def store(title,content):
    csvrow = []
    csvrow.append(title)
    csvrow.append(content)
    writer.writerow(csvrow)


9.关于csv还是出错了一下,比如乱码之类的,暂时还没有完全解决。。





 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值