采用requests库构建简单的网络爬虫
Date: 2019-06-09
Author: Sun
我们分析格言网 https://www.geyanw.com/, 通过requests网络库和bs4解析库进行爬取此网站内容。
项目操作步骤
创建项目文件夹
--geyanwang
---spiders # 保存我们爬虫代码
---- geyan.py # 爬虫的代码
---doc # 操作步骤说明文档
创建虚拟环境
cd geyanwang/
virtualenv spider --python=python3 # 创建venv虚拟环境
安装依赖库
$ source venv/bin/activate
(spider) $ pip install requests
(spider) $ pip install lxml
(spider) $ pip install bs4
编写代码 spiders/geyan.py
# -*- coding: utf-8 -*-
__author__ = 'sun'
__date__ = '2019/6/19 下午2:22'
from bs4 import BeautifulSoup as BSP4
import requests
g_set = set()
def store_file(file_name, r):
html_doc = r.text
with open("geyan_%s.html"%file_name, "w") as f:
f.write(html_doc)
def download(url, filename='index'):
'''
:param url: 待下载页面地址
:return: 页面内容
'''
r = requests.get(url) #发送url请求,得到url网页内容
store_file(filename, r)
return r
def parse_tbox(tbox, base_domain):
'''
解析某个小说类别
:param tbox:
:param base_domain:
:return:
'''
tbox_tag = tbox.select("dt a")[0].text
print(tbox_tag)
index = 0
li_list = tbox.find_all("li")
for li in li_list:
link = base_domain + li.a['href']
print("index:%s, link:%s" % (index, link))
index += 1
if link not in g_set:
g_set.add(link)
filename = "%s_%s" % (tbox_tag, index)
sub_html = download(link, filename)
def parse(response):
'''
对页面进行解析
:param response: 页面的返回内容
:return:
'''
base_domin = response.url[:-1]
g_set.add(base_domin)
#print(base_domin)
html_doc = response.content
soup = BSP4(html_doc, "lxml")
tbox_list = soup.select("#p_left dl.tbox") #小说
[parse_tbox(tbox, base_domin) for tbox in tbox_list]
def main():
base_url = "https://www.geyanw.com/"
response = download(base_url)
parse(response)
if __name__ == "__main__":
main()
- 运行上述代码,会产生一堆的html文件至本地
作业
上述geyan.py文件中只处理了首页
如何按照类别分页爬取相关内容,采用多线程实现
eg:
https://www.geyanw.com/lizhimingyan/
https://www.geyanw.com/renshenggeyan/
将爬取的网页以文件夹命名不同的方式进行保存至本地
采用requests库构建简单的网络爬虫的更多相关文章
- python3.6 urllib.request库实现简单的网络爬虫、下载图片
#更新日志:#0418 爬取页面商品URL#0421 更新 添加爬取下载页面图片功能#0423 更新 添加发送邮件功能# 优化 爬虫异常处理.错误页面及空页面处理# 优化 爬虫关键字黑名单.白名单,提 ...
- Python:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)
Python:requests库.BeautifulSoup4库的基本使用(实现简单的网络爬虫) 一.requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起 ...
- Java实现一个简单的网络爬虫
Java实现一个简单的网络爬虫 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWri ...
- python requests库的简单使用
requests是python的一个HTTP客户端库,跟urllib,urllib2类似,但比urllib,urllib2更加使用简单. 1. requests库的安装在你的终端中运行pip安装命令即 ...
- 在python3中使用urllib.request编写简单的网络爬虫
转自:http://www.cnblogs.com/ArsenalfanInECNU/p/4780883.html Python官方提供了用于编写网络爬虫的包 urllib.request, 我们主要 ...
- 一只简单的网络爬虫(基于linux C/C++)————开篇
最近学习开发linux下的爬虫,主要是参考了该博客及其他一些网上的资料.网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息 ...
- 使用scrapy-redis构建简单的分布式爬虫
前言 scrapy是python界出名的一个爬虫框架.Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. 虽然scr ...
- 一只简单的网络爬虫(基于linux C/C++)————socket相关及HTTP
socket相关 建立连接 网络通信中少不了socket,该爬虫没有使用现成的一些库,而是自己封装了socket的相关操作,因为爬虫属于客户端,建立套接字和发起连接都封装在build_connect中 ...
- 一只简单的网络爬虫(基于linux C/C++)————Url处理以及使用libevent进行DNS解析
Url处理 爬虫里使用了两个数据结构来管理Url 下面的这个数据结构用来维护原始的Url,同时有一个原始Url的队列 //维护url原始字符串 typedef struct Surl { char * ...
随机推荐
- Hexo系列(二) 配置文件详解
Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...
- 22.external version
主要知识点 基于external version进行乐观锁并发控制 es提供了一个feature,就是说,你可以不用它提供的内部_version版本号来进行并发控制,可以基于你自己维护的一个版本号来进 ...
- SLES documentation
https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_basicnet_yast.html
- 0728MySQL数据库InnoDB存储引擎重做日志漫游REDOLOG,UNDOLOG
转自http://www.mysqlops.com/2012/04/06/innodb-log1.html 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库Inn ...
- # 从零開始搭建Hadoop2.7.1的分布式集群
Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...
- KVO---视图间数据的传递:标签显示输入的内容【多个视图中】
RootViewController.m #import "ModalViewController.h" @interface RootViewController () @end ...
- iOS 块的简单理解
占位 自己主动转载器那小子,你转完了没? 转完了,我开写了哈! Block,就两个事儿,一个是引用,一个是实例,除了实现处.其他地方都是引用. 以此思路.再继续看看引用和实现的定义方式吧. 參考官方文 ...
- C语言数组和函数实例练习(二)
1.C语言中不允许函数的嵌套定义,但可以使用函数的嵌套调用. 例1:输入4个整数,找出其中最大的数. #include <stdio.h> #include <stdlib.h> ...
- Java异常的捕获与处理
Java提供了try(尝试).catch(捕捉).finally(最终)这三个关键字来处理异常.在处理各种异常时,需要用到对应的异常类,指的是由程序抛出的对象所属的类. 一.异常处理的使用 由于fin ...
- Dark roads--hdoj
Dark roads Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Su ...