每天的时事新闻都是大家关注度最高讨论量最大的,这时对于新闻行业来说,掌握第一手新闻资料,独家报道是很厉害事,特别是像娱乐圈,掌握第一手资料的狗子简直可以成为了大家吃瓜的导向。所以怎么去获取第一手资料呢,今天就分享下怎么用Python3网络爬虫爬取腾讯新闻内容。
要抓取新闻,首先得有新闻源,也就是抓取的目标网站。国内的新闻网站,从中央到地方,从综合到垂直行业,大大小小有几千家新闻网站。百度新闻(news.baidu.com)收录的大约两千多家。那么我们先从百度新闻入手。
数据需求是:从门户网站爬取新闻,将新闻标题,作者,时间,内容保存到本地txt中.
爬虫流程如下:
1、模拟请求网页,模拟浏览器,打开目标网站。
2、获取数据,打开网站之后,就可以自动化的获取我们所需要的网站数据。
3、保存数据,拿到数据之后,需要持久化到本地文件或者数据库等存储设备中。
那么我们该如何使用 Python 来编写自己的爬虫程序呢,在这里我要重点介绍一个 Python 库,urllib库。为了防止目标网站的反爬机制,这里我们可以选择使用urllib+代理IP来获取数据,并且还使用了threading库和time库,使其能够实现多线程采集。代码示例如下:
#! -- encoding:utf-8 -- from urllib import request import threading # 导入threading库,用于多线程 import time # 导入time库,用于延时 #要访问的目标页面 targetUrl = “news.baidu.com/” #代理服务器(产品官网 www.16yun.cn) proxyHost = “t.16yun.cn” proxyPort = “31111” #代理验证信息 proxyUser = “www.16yun.cn” proxyPass = “16ip” proxyMeta = “http://%(user)s:%(pass)s@%(host)s:%(port)s” % { “host” : proxyHost, “port” : proxyPort, “user” : proxyUser, “pass” : proxyPass, } proxy_handler = request.ProxyHandler({ “http” : proxyMeta, “https” : proxyMeta, }) opener = request.build_opener(proxy_handler) request.install_opener(opener) #定义一个锁对象,用于控制每200毫秒只能请求一次 lock = threading.Lock() #定义一个函数,用于发起请求和打印响应 def get_url(): # 获取锁,如果锁被占用,就等待,直到锁释放 lock.acquire() resp = request.urlopen(targetUrl) # 发起请求 # 判断状态码是否为200,如果不是,打印错误信息 if resp.status_code == 200: print(resp.read()) # 打印响应内容 else: print(f"请求失败,状态码为{resp.status_code}") # 打印错误信息 time.sleep(0.2) # 延时200毫秒 # 释放锁,让其他线程可以获取锁 lock.release() #定义一个列表,用于存放线程对象 threads = [] #创建10个线程,每个线程执行get_url函数 for i in range(10): t = threading.Thread(target=get_url) # 创建线程对象 threads.append(t) # 将线程对象添加到列表中 #启动所有线程 for t in threads: t.start() #等待所有线程结束 for t in threads: t.join()