前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3爬虫实战(一):新闻标题及其URL

Python3爬虫实战(一):新闻标题及其URL

作者头像
用户5473628
发布2019-08-08 15:25:25
1.4K0
发布2019-08-08 15:25:25
举报
文章被收录于专栏:MiningAlgorithmsMiningAlgorithms

本文以'链节点'网站为例,实现新闻标题及其URL批量获取,并以字典的形式存入本地。

代码使用python的requests模块,并以json格式转存本地。

分成3步:1,发请求;2,解析数据;3,保存数据。

代码语言:javascript
复制
import requests
from lxml import etree
import re
import json
import time

class BtcSpider(object):
    def __init__(self):
        self.base_url = 'https://www.chainnode.com/forum/61-'
        self.headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36'}
        self.news_name = []
        self.news_url = []

    # 1,发请求:
    def get_response(self, url):
        response = requests.get(url, headers = self.headers)
        data = response.content.decode()
        return data

    # 2,解析数据:
    def parse_data(self, data):
        # 1,转类型; 使用xpath解析网页
        x_data = etree.HTML(data)

        # 2,xpath路径解析:        
        result2 = x_data.xpath('//a[@class ="link-dark-major font-bold bbt-block"]/text()')  # 返回新闻标题
        result3 = x_data.xpath('//a[@class ="link-dark-major font-bold bbt-block"]/@href')   # 返回新闻url

        for i in result2:                         # 使用re规范化新闻标题
            result = re.sub(r'\s+', '', i)
            self.news_name.append(result)

        url_head = 'https://www.chainnode.com'
        for i in range(len(result3)):             # 合成新闻完整的url
            url_element = url_head + result3[i]
            self.news_url.append(url_element)
        # print(news_url)

        news_name_url = dict(zip(self.news_name, self.news_url))  # 将新闻标题与新闻url一一对应起来,组成一个字典
        #print(news_name_url)

        return news_name_url

    # 3,保存数据:
    def save_data(self, data):

        news_data = json.dumps(data)
        with open('dict_of_news_name_url.json', 'w') as f:  # 将字典以json格式保存到本地
            f.write(news_data)

    # 4,爬虫走起:
    def run(self):

        for i in range(1, 100):  # 爬取前100页新闻标题与其对应的url
            # 1),拼接完整的url:
            url = self.base_url + str(i)
            print(url)
            # 2),发请求:
            data = self.get_response(url)
            # 3),做解析:
            data_news = self.parse_data(data)

        # 4),保存数据:
        self.save_data(data_news)


start = time.time()
BtcSpider().run()
# 读取保存的json文件,检验是否成功:
with open('dict_of_news_name_url.json', 'r') as f:
    data_dict = json.load(f)
print(data_dict)  # 成功打印
print(len(data_dict))
end = time.time()
print('cost time: ', end-start, 's')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MiningAlgorithms 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档