python-代码实战-爬取新闻标题

近期开始学习python,目前以爬虫方向为主,打算在这个过程中通过代码的实践来记录学习过程,顺带当成笔记。

我的第一个完全由自己编写的爬虫代码产生啦!

主要是抓取新闻标题、时间等

python-代码实战-爬取新闻标题_第1张图片

 本次写代码代码用到的库:

import requests
import csv
from bs4 import BeautifulSoup

首先设置url等基本信息

news_list = []
head = ['新闻标题','时间','主要内容']
url = '这里输入url'
headers = {'User-Agent':'这里输入自己电脑的请求头headers'}

使用request.get请求网页

res = requests.get(url,headers=headers)
#本来demo这一段是没有的,但是常规解码跑出来是乱码,这里用了暴力解码
demo = res.text.encode("iso-8859-1").decode("GBK")
bs = BeautifulSoup(demo,'html.parser')

开始抓取:(由于对html结构还不太熟悉,所以把小头条新闻和其他新闻依次分开了抓取,后续会继续改进代码!)

#首先爬取这个板块的两个头条
#为了方便查看,设置了爬取计数变量a和b
a = 1
econ = bs.find('div',class_='layout Finance cf pdao1').find_all('div',class_='Repeat Repeat1 cf section-common-share-wrap')
for info in econ :
    print('正在爬取第{}条新闻'.format(a))
    news_title = info.find('div',class_='news2 cf').find('h3').find('a').text
    news_url = info.find('div',class_='news2 cf').find('h3').find('a')['href']

    res2 = requests.get(news_url,headers=headers)
    #这里也用了暴力解码
    demo = res2.text.encode("iso-8859-1").decode("GBK")
    bs2 = BeautifulSoup(demo,'html.parser')

    data = bs2.find('div',class_='col-1-1 fl').text
    paper = bs2.find('div',class_='rm_txt_con cf').find_all('p')[1].text

    dict_news = {'新闻标题':news_title,'时间':data,'主要内容':paper}
    news_list.append(dict_news)
    a += 1

#再爬取头条旁白的新闻
b = 3
econ2 = bs.find('div',class_='layout Finance cf pdao1').find_all('ul',class_='list6 cf')
for info2 in econ2 :
    econ3 = info2.find_all('li')
    for info3 in econ3 :
        print('正在爬取第{}条新闻'.format(b))
        news_title = info3.find('a').text
        news_url = info3.find('a')['href']

        res3 = requests.get(news_url, headers=headers)
        #暴力解码+3
        demo = res3.text.encode("iso-8859-1").decode("GBK")
        bs3 = BeautifulSoup(demo, 'html.parser')

        data = bs3.find('div', class_='col-1-1').text
        paper = bs3.find('div', class_='rm_txt_con cf').find_all('p')[1].text

        dict_news = {'新闻标题': news_title, '时间': data, '主要内容': paper}
        news_list.append(dict_news)
        b += 1

最后使用csv库写入抓取的内容:

with open('News.csv','w',encoding='utf-8-sig',newline='') as f :
    list_write = csv.DictWriter(f,fieldnames=head)
    list_write.writeheader()
    list_write.writerows(news_list)

爬取成功!在根目录下查看News.csv文件就可以看到爬取结果啦!

本次代码编写用了1.5个小时,包括解决过程中遇到的所有问题,没有用暴力解码的时候抓出来的信息除了链接那一列,其他都是乱码的/(ㄒoㄒ)/~~还有一些零零碎碎的问题,放到最后一起记录。

过程中遇到的一些问题

1.乱码(使用暴力解码后解决) 

python-代码实战-爬取新闻标题_第2张图片

2.第11个新闻的html格式中元素的属性发生了变化 

python-代码实战-爬取新闻标题_第3张图片

到网页中查看才发现第11个新闻的某一个html元素属性发生了变化,最后剪掉了尾巴。

划重点:调用Tag属性的时候可以只调用一部分!

代码还可以改进的地方(改进的方向):

1.总行数还能更精简 太罗嗦了

2.好像没有了 暂时没有想到

最后的最后附上不分白天黑夜陪我学习的lulu猪!

python-代码实战-爬取新闻标题_第4张图片

你可能感兴趣的:(Python_实战项目,python,爬虫,科技)