爬虫最基本的工作流程:内涵社区网站为例

网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则自动地抓取互联网信息的程序。

只要是浏览器能做的事情,原则上,爬虫都能够做


先来看一下最简单的网络爬虫百度Logo图片提取:

import requestsr = requests.get("https://www.baidu.com/img/bd_logo1.png")with open("baidu.png","wb") as f:f.write(r.content)


接下来按照爬虫基本工作流程提取内涵社区网站文本内容:

1.获取url:

url=http://neihanshequ.com/
headers= {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}


2.发送请求,接受响应:

r = requests.get(url,headers=headers)
html_str = r.content.decode()
3.提取数据:

'''
<h1 class="title"><p>公交车上,一小伙对着手机打公放点微信语音:“臭小子,你是不是一点也不想你老娘?都不知道陪我聊聊天,回家来看看我...”每点开这段语音,小伙都自言自语说道:“别唠叨啦,我每天都陪你聊天,好不好!想你了,老妈...”一大爷看不下去了,说道:“小伙子!你能不能不循环播这段语音,你要是想你妈了,能不能给她打个电话?”小伙说道:“上个月她走了,就只剩下这段语音了...”</p></h1>'''
t = re.findall(r"<h1 class=\"title\">.*?<p>(.*?)</p>.*?</h1>",html_str,re.S)
4.保存数据:

with open("neihan.txt","w",encoding="utf-8") as f:for i in t:f.write(i)f.write("\n")

这是最简单的面向过程网站爬取,最终代码如下:

import re
import requests
def Neihan():url=http://neihanshequ.com/headers= {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}r = requests.get(url,headers=headers)html_str = r.content.decode()'''<h1 class="title"><p>公交车上,一小伙对着手机打公放点微信语音:“臭小子,你是不是一点也不想你老娘?都不知道陪我聊聊天,回家来看看我...”每点开这段语音,小伙都自言自语说道:“别唠叨啦,我每天都陪你聊天,好不好!想你了,老妈...”一大爷看不下去了,说道:“小伙子!你能不能不循环播这段语音,你要是想你妈了,能不能给她打个电话?”小伙说道:“上个月她走了,就只剩下这段语音了...”</p></h1>'''t = re.findall(r"<h1 class=\"title\">.*?<p>(.*?)</p>.*?</h1>",html_str,re.S)with open("neihan.txt","w",encoding="utf-8") as f:for i in t:f.write(i)f.write("\n")
Neihan()


按照面向对象爬取内涵社区网站文本,爬虫工作流程代码如下:

# coding=utf-8
import requests
import re
import jsonclass Neihan:def __init__(self):self.start_url = "http://neihanshequ.com/"self.headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}self.next_url_temp = "http://neihanshequ.com/joke/?is_json=1&app_name=neihanshequ_web&max_time={}"def parse_url(self,url): #发送url地址的请求,获取响应r = requests.get(url,headers=self.headers)return r.content.decode()def get_first_page_content_list(self,html_str):t = re.findall(r"<h1 class=\"title\">.*?<p>(.*?)</p>.*?</h1>", html_str, re.S)#获取max——timemax_time = re.findall("max_time: '(.*?)'",html_str,re.S)[0]return t,max_timedef save_content_list(self,content_list): #保存for content in content_list:print(content)def get_content_list(self,html_str):dict_response = json.loads(html_str)content_list = [i["group"]['text']  for i in dict_response["data"]["data"]]max_time = dict_response["data"]["max_time"]#获取has_morehas_more = dict_response["data"]["has_more"]return content_list,max_time,has_moredef run(self):#实现主要逻辑#1.start_url#2.发送请求,获取响应html_str = self.parse_url(self.start_url)#3.提取数据content_list,max_time = self.get_first_page_content_list(html_str)#4.保存self.save_content_list(content_list)#5.获取第二页的urlhas_more=Truewhile has_more:next_url = self.next_url_temp.format(max_time)html_str = self.parse_url(next_url)  #发送下一页的请求content_list,max_time,has_more = self.get_content_list(html_str)#获取json中的段子和max——timeself.save_content_list(content_list)if __name__ == '__main__':neihan = Neihan()neihan.run()











本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 网易-2. 古老的游戏机

文章目录1. 题目2. 解题1. 题目 小易有一个古老的游戏机&#xff0c;上面有着经典的游戏俄罗斯方块。因为它比较古老&#xff0c;所以规则和一般的俄罗斯方块不同。 首先&#xff0c;荧幕上一共有 n 列&#xff0c;每次都会有一个 1 x 1 的方块随机落下&#xff0c;在同一列中…

RDD(弹性分布式数据集)

1、什么是RDD RDD&#xff08;分布式弹性数据集&#xff09;是对分布式计算的抽象&#xff0c;代表要处理的数据&#xff0c;一个数据集,RDD是只读分区的集合。数据被分片&#xff0c;分成若干个数据分片&#xff0c;存储到不同的节点中&#xff0c;可以被并行的操作&#xff…

爬虫Scrapy框架基本流程图入门:以东莞阳光网为例

一、Scrapy简单介绍 Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。 所谓网络爬虫&#xff0c;就是一个在网上到处或定向抓取数据的程序&#xff0c;当然&#xff0…

Eclipse自动补全功能轻松设置 || 不需要修改编辑任何文件

本文介绍如何设置Eclipse代码自动补全功能。轻松实现输入任意字母均可出现代码补全提示框。Eclipse代码自动补全功能默认只包括 点"." &#xff0c;即只有输入”."后才出现自动补全的提示框。想要自动补全总是去按 “Alt / ”也很麻烦。 其实只需简单在Eclips…

RDD持久化、广播、累加器

1、持久化 RDD的持久化包括两个方面&#xff1a;①操作RDD的时候怎么保存结果&#xff0c;这个部分属于action算子的部分②在实现算法的时候要进行cache、persist&#xff0c;还有checkpoint进行持久化。 1.1 persist和cache Spark稍微复杂一点的算法里面都会有persit的身影…

LeetCode 网易-1. 分割环(前缀和 + 哈希)

文章目录1. 题目2. 解题1. 题目 小易有 n 个数字排成一个环&#xff0c;你能否将它们分成连续的两个部分(即在环上必须连续)&#xff0c;使得两部分的和相等&#xff1f; 输入描述&#xff1a; 第一行数据组数 T &#xff0c;对于每组数据 第一行数字 n &#xff0c;表示数字…

RDD的依赖与分区

1 宽依赖和窄依赖 RDD从具体的依赖的角度讲&#xff0c;有窄依赖和宽依赖2种情况。 窄依赖&#xff1a;指每个父RDD的一个Partition最多被子RDD的一个Partition所使用&#xff0c;例如map、filter等都会产生窄依赖&#xff1b; 宽依赖&#xff1a;指一个父RDD的Partition会被…

爬虫案列:京东商城长裤信息获取

1、创建Scrapy项目 使用全局命令startproject创建项目&#xff0c;创建新文件夹并且使用命令进入文件夹&#xff0c;创建一个名为jingdong的Scrapy项目。 [python] view plaincopy scrapy startproject jingdong 2.使用项目命令genspider创建Spider [python] view plaincopy …

ACwing 2. 01背包问题(DP)

文章目录1. 题目2. 解题1. 题目 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 …

Redis-Scrapy分布式爬虫:当当网图书为例

Scrapy-Redis分布式策略&#xff1a; Scrapy_redis在scrapy的基础上实现了更多&#xff0c;更强大的功能&#xff0c;具体体现在&#xff1a; reqeust去重&#xff0c;爬虫持久化&#xff0c;和轻松实现分布式 假设有四台电脑&#xff1a;Windows 10、Mac OS X、Ubuntu 16.04、…

Saprk排序

1、基础排序算子sortBy和sortByKey 在Spark中存在两种对RDD进行排序的函数&#xff0c;分别是 sortBy和sortByKey函数。sortBy是对标准的RDD进行排序&#xff0c;它是从Spark0.9.0之后才引入的。而sortByKey函数是对PairRDD进行排序&#xff0c;也就是有Key和Value的RDD。下面…

ACwing 3. 完全背包问题(DP)

文章目录1. 题目2. 解题1. 题目 有 N 种物品和一个容量是 V 的背包&#xff0c;每种物品都有无限件可用。 第 i 种物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。…

Crontab定时任务访问url实例

以下操作均是在ubuntu 下操作的&#xff1a; 1、进入crontab文件的编写状态&#xff1a; crontab -e 2、第一次进入编写crontab文件的界面&#xff0c;系统会提示选择相应的编辑器&#xff0c;一般我们选择vi编辑器就可以了&#xff1a;选择/usr/bin/vim.tiny 12345Select a…

ACwing 4. 多重背包问题 I(DP)

文章目录1. 题目2. 解题1. 题目 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件&#xff0c;每件体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使物品体积总和不超过背包容量&#xff0c;且价值总和最大。 输出最大价值。 输入格式…

数据算法与结构基本知识

数据结构与算法作用 没有看过数据结构和算法&#xff0c;有时面对问题可能会没有任何思路&#xff0c;不知如何下手去解决&#xff1b;大部分时间可能解决了问题&#xff0c;可是对程序运行的效率和开销没有意识&#xff0c;性能低下&#xff1b;有时会借助别人开发的利器暂时…

Master HA源码解析

1、Master HA概述 Spark在生产上做HA一般采用的是通过zookeeper的方式&#xff0c;配置3个master的话是比较可靠的方式。采用zookeeper做HA的话zookeeper会保存整个Spark程序运行时候的元数据&#xff08;包括Workers&#xff0c;Drivers&#xff0c;Applications&#xff0c;…

DNS坑爹呢?!

昨天下午3点多&#xff0c;大量网民反映无法上网。多家DNS服务商通过微博透露&#xff0c;在1月21日下午3点20分左右&#xff0c;全国所有通用顶级域的根出现异常&#xff0c;导致部分国内网民无法访问.com域名网站&#xff0c;对中国互联网造成严重影响。 昨天下午有事出去&am…

数据结构顺序表基本流程

生活中很多事物是有顺序关系的&#xff0c;如班级座位从前到后是按排的顺序&#xff0c;从左到右是按列的顺序&#xff0c;可以很方便的定位到某一个位置&#xff0c;但如果座位是散乱的&#xff0c;就很难定位。 在程序中&#xff0c;经常需要将一组&#xff08;通常是同为某…

Spark2.x RPC解析

1、概述 在Spark中很多地方都涉及网络通信&#xff0c;比如Spark各个组件间的消息互通、用户文件与Jar包的上传、节点间的Shuffle过程、Block数据的复制与备份等。Spark 2.0 之后&#xff0c;master 和worker 之间完全不使用akka 通信&#xff0c;改用netty实现。因为使用Akka…

LeetCode 1629. 按键持续时间最长的键

文章目录1. 题目2. 解题1. 题目 LeetCode 设计了一款新式键盘&#xff0c;正在测试其可用性。测试人员将会点击一系列键&#xff08;总计 n 个&#xff09;&#xff0c;每次一个。 给你一个长度为 n 的字符串 keysPressed &#xff0c;其中 keysPressed[i] 表示测试序列中第 …