第一个爬虫之——爬取学校官网新闻

那么既然上一篇文字里的问题解决了,下面就来把爬虫代码贴在这里,供日后回顾用。

另外,上一篇提到的覆盖问题,最终在网上找到的解决办法如下:

原第16行:csv_file =open('data.csv', 'w', encoding="utf-8", newline='')

改成:csv_file =open('data.csv', 'a', encoding="utf-8", newline='')

差别是:w 改成了 a

原理如下:python利用open打开文件的方式:

w:以写方式打开, 

a:以追加模式打开 (从 EOF 开始, 必要时创建新文件) 

r+:以读写模式打开 

w+:以读写模式打开 (参见 w ) 

a+:以读写模式打开 (参见 a ) 

rb:以二进制读模式打开 

wb:以二进制写模式打开 (参见 w ) 

ab:以二进制追加模式打开 (参见 a ) 

rb+:以二进制读写模式打开 (参见 r+ ) 

wb+:以二进制读写模式打开 (参见 w+ ) 

ab+:以二进制读写模式打开 (参见 a+ )

资料来源:https://blog.csdn.net/lwgkzl/article/details/82147474

下面是代码:

import requests

import csv

from bs4import BeautifulSoup

for jin range(100):#爬取前多少页的新闻就填几

    j+=1

    if j ==1:

html = requests.get("http://web.fosu.edu.cn/news/category/school-news")

else:

html = requests.get("http://web.fosu.edu.cn/news/category/school-news"+"/page/"+str(j))

soup = BeautifulSoup(html.content, 'lxml')#初始化,由于html是request对象,无法用beautifulsoup解释,因此在后面加上.contain

                                              #print(soup)输出soup转换后的内容

    all_news = soup.find('div', class_="contain2_right_bottom")#找到最大的div,其class为contain2_big

                                              #print(all_news) #输出新闻盒子div里的内容

    csv_file =open('data.csv', 'a', encoding="utf-8", newline='')#''

    writer = csv.writer(csv_file)

writer.writerow(["新闻标题","发布时间","新闻链接","新闻内容"])#写入标题

    print('正在爬第' +str(j) +'页新闻')

for iin range(10):#爬取目录第一页的新闻标题及链接

        all_a_tag = all_news.find_all('a')# 找到所有的a标签,赋值给all_a_tag

        news_name = all_a_tag[i].text#标题的抓取

        news_link = all_a_tag[i]['href']#链接的抓取

        # 新闻正文的抓取

        html_a = requests.get(news_link)

soup_a = BeautifulSoup(html_a.content, 'lxml')

news_contain = soup_a.find('div', class_='contain3_right_bottom')

news_main = news_contain.text

#新闻发布时间的抓取

        news_time = soup_a.find('div', class_='contain3_right_bottom_xx')

news_time_a = news_time.text

print('新闻标题:{},时间:{},链接:{},内容:{}'.format(news_name,news_time_a,news_link,news_main))

writer.writerow([news_name,news_time_a,news_link,news_main])

print('第' +str(j) +'页第'+str(i+1) +'篇新闻爬取完毕!')

print('第' +str(j) +'页新闻爬取完毕!')

csv_file.close()

print("写入完毕!")

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容