1. Web服务器网站
进一步把前面的Web网站的mysql.html, python.html, java.html丰富其中 的内容,并加上图形:
mysql.html
mysql
MySQL数据库
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗 下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是 最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软 件。
Home
java.html
java
Java程序设计
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优 点,还摒弃了C++里难以理解的多继承、指针等概念,因此 Java语言具有功能强大和简单易用两个特征。Java语言作为静 态面向对象编程语言的代表,极好地实现了面向对象理论,允 许程序员以优雅的思维方式进行复杂的编程.
Home
python.html
python
Python程序设计
Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一 种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Home
2. 爬取网站的复杂数据
服务器server.py程序还是前面3.2的,如下:
import flask
import os
app = flask.Flask(__name__)
def getFile(fileName):
data = b""
if os.path.exists(fileName):
fobj = open(fileName, "rb")
data = fobj.read()
fobj.close()
return data
@app.route("/")
def index():
return getFile("books.html")
@app.route("/")
def process(section):
data = ""
if section != "":
data = getFile(section)
return data
if __name__ == "__main__":
app.run()
爬取网站中的mysql, python, java的简介与图像。我们看到简介在网页的第一个
设计客户端client.py程序如下:
from bs4 import BeautifulSoup
import urllib.request
def spider(url):
global urls
if url not in urls:
urls.append(url)
try:
data = urllib.request.urlopen(url)
data = data.read().decode()
soup = BeautifulSoup(data, "lxml")
print(soup.find("h3").text)
divs = soup.select("div")
imgs = soup.select("img")
# 判断这个url页面是否有与,如果有就获取第一个的文字,下载第一个的图像
if len(divs) > 0 and len(imgs) > 0:
print(divs[0].text)
url = start_url + "/" + imgs[0]["src"]
urllib.request.urlretrieve(url, "downloaded-" + imgs[0]["src"])
print("download-", imgs[0]["src"])
links = soup.select("a")
for link in links:
href = link["href"]
url = start_url + "/" + href
spider(url)
except Exception as err:
print(err)
start_url = "http://127.0.0.1:5000"
urls = []
spider(start_url)
print("The End")
运行结果如下:
程序执行完毕后还看到下载了3个文件:
"downloaded-mysql.jpg"、 "downloadedpython.jpg"、"downloaded-java.jpg"
3. 爬取程序的改进
(1)服务器程序
由于我们的web网站时本地的,因此下载图像非常快,而实际应用中 Web网站是远程的一个服务器,由于网络原因可能下载会比较慢。为了 模拟这个过程,
改进后的服务器serverUpdate.py程序如下:
import flask
import os
import random
import time
app = flask.Flask(__name__)
def getFile(fileName):
data = b""
if os.path.exists(fileName):
fobj = open(fileName, "rb")
data = fobj.read()
fobj.close()
# 随机等待1-10秒
time.sleep(random.randint(1, 10))
return data
@app.route("/")
def index():
return getFile("books.html")
@app.route("/")
def process(section):
data = ""
if section != "":
data = getFile(section)
return data
if __name__ == "__main__":
app.run()
该程序在每次返回一个网页或者图像的函数getFile中都随机等待了1- 10秒,这个过程十分类似网络条件较差的情景,即访问任何一个网页或 者图像都有1-10秒的延迟。
(2)客户端程序
从目前的程序来看这个程序在下载一个图像时是等待的,如果这个图像很大,那么下载时间很长,程序就必须一直等待,其它网页就无法继续访问,即卡死在一个网页的图像下载处。为了避免这个问题,一般可以对程序做以下改进:
- 设置urllib.request下载图像的时间,如果超过一定时间还没有完 成下载就放弃;
- 设置下载过程是一个与主线程不同的子线程,子线程完成下载 任务,不影响主线程继续访问别的网页。
改进后的客户端clientUpdate.py程序如下:
from bs4 import BeautifulSoup
import urllib.request
import threading
def download(url, fileName):
try:
# 设置下载时间最长100秒
data = urllib.request.urlopen(url, timeout=100)
data = data.read()
fobj = open("download" + fileName, "wb")
fobj.write(data)
fobj.close()
print("download", fileName)
except Exception as err:
print(err)
def spider(url):
global urls
if url not in urls:
urls.append(url)
try:
data = urllib.request.urlopen(url)
data = data.read().decode()
soup = BeautifulSoup(data, "lxml")
print(soup.find("h3").text)
links = soup.select("a")
divs = soup.select("div")
imgs = soup.select("img")
# 判断这个url页面是否有与,如果有就获取第一个的文字,下载第一个的图像
if len(divs) > 0 and len(imgs) > 0:
print(divs[0].text)
url = start_url + "/" + imgs[0]["src"]
# 启动一个下载线程下载图像
T = threading.Thread(target=download, args=(url, imgs[0]["src"]))
T.setDaemon(False)
T.start()
threads.append(T)
for link in links:
href = link["href"]
url = start_url + "/" + href
spider(url)
except Exception as err:
print(err)
start_url = "http://127.0.0.1:5000"
urls = []
threads = []
spider(start_url)
# 等待所有线程执行完毕
for t in threads:
t.join()
print("The End")
执行结果如下:
从结果看到访问java.htm网页后没有及时完成java.jpg的下载,java.jpg是在访问 network.htm网页后才完成下载的,这就是多线程的过程。
$(function() {
setTimeout(function () {
var mathcodeList = document.querySelectorAll('.htmledit_views img.mathcode');
if (mathcodeList.length > 0) {
for (let i = 0; i < mathcodeList.length; i++) {
if (mathcodeList[i].naturalWidth === 0 || mathcodeList[i].naturalHeight === 0) {
var alt = mathcodeList[i].alt;
alt = '\(' + alt + '\)';
var curSpan = $('');
curSpan.text(alt);
$(mathcodeList[i]).before(curSpan);
$(mathcodeList[i]).remove();
}
}
MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
}
}, 1000)
});
即使再小的船也能远航
关注
关注
-
0
点赞
-
踩
-
1
收藏
觉得还不错?
一键收藏
-
打赏
-
0
评论
专栏目录
如何使用爬虫软件爬取数据.pdf
05-31
如何使用爬虫软件爬取数据.pdf如何使用爬虫软件爬取数据.pdf如何使用爬虫软件爬取数据.pdf如何使用爬虫软件爬取数据.pdf如何使用爬虫软件爬取数据.pdf如何使用爬虫软件爬取数据.pdf如何使用爬虫软件爬取数据.pdf如何使用爬虫软件爬取数据.pdf
python爬虫爬取网页数据并解析数据
09-24
主要介绍了python爬虫如何爬取网页数据并解析数据,帮助大家更好的利用爬虫分析网页,感兴趣的朋友可以了解下
参与评论
您还未登录,请先
登录
后发表或查看评论
小爬虫(爬取网站的数据)
02-18
这是一个小型爬虫
可以帮助大家更好的理解什么是爬虫
爬虫可以用来做什么
golang爬虫将爬取的数据存入mongodb
07-22
golang爬虫将爬取的数据存入mongodb
Python爬虫爬取、解析数据操作示例
09-17
主要介绍了Python爬虫爬取、解析数据操作,结合实例形式分析了Python爬虫爬取、解析、存储数据相关操作技巧与注意事项,需要的朋友可以参考下
Python爬虫爬取电影票房数据及图表展示操作示例
09-17
主要介绍了Python爬虫爬取电影票房数据及图表展示操作,结合实例形式分析了Python爬虫爬取、解析电影票房数据并进行图表展示操作相关实现技巧,需要的朋友可以参考下
爬虫爬取的数据集(一)
06-08
爬取Microsoft Bing上的10类花卉数据集,没有统一尺寸数据量较大,分两批次。
python爬虫:爬取新浪新闻数据
01-20
我们可以试试爬取新浪新闻首页,我们发现会返回403 ,因为对方服务器会对爬虫进行屏蔽。此时,我们需要伪装成浏览器才能爬取。 1.实战分析: 浏览器伪装一般通过报头进行: 打开某个网页,按F12—Network— 任意点一个...
爬虫爬取的数据集(二)
06-08
爬取Microsoft Bing上的10类花卉数据集,没有统一尺寸数据量较大,分两批次。
爬取网站职位_爬虫_爬取拉勾网_拉勾网_职位_
10-03
爬取拉勾网数据分析师相关职位的信息,每爬一页,随机间隔3-10秒
python3.4爬取网络图片
09-30
python3.4爬取网络图片,然后写入文件的示例小程序
python爬虫爬取网页表格数据
12-25
用python爬取网页表格数据,供大家参考,具体内容如下 from bs4 import BeautifulSoup import requests import csv import bs4 #检查url地址 def check_link(url): try: r = requests.get(url) r.raise_for_...
Python爬虫实例爬取网站搞笑段子
09-21
主要介绍了Python爬虫实例爬取网站搞笑段子,具有一定参考价值,看完了代码不妨看看段子,希望大家每天开心。
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
09-09
主要介绍了Python3实现的爬虫爬取数据并存入mysql数据库操作,涉及Python正则爬取数据及针对mysql数据库的存储操作相关实现技巧,需要的朋友可以参考下
爬虫之爬取英雄联盟战绩详细数据
12-22
爬虫之爬取英雄联盟战绩详细数据 思路解析: 我们首先打开LOL游戏官网,登录自己的账号(因为牵扯到账号,所以需要用到cookie),然后选择你想爬取数据的大区! 在这个界面我们按下F12查看源代码,在Network下的JS里,刚开始...
爬虫测试爬取网页数据0302
03-02
爬虫测试爬取网页数据0302
python爬虫scrapy爬取网站
最新发布
06-01
### 回答1:
Python爬虫Scrapy是一种用于爬取网站数据的工具。它可以自动化地从网站上获取数据,并将其存储在本地或远程服务器上。Scrapy使用Python编写,具有高效、灵活和可扩展的特点,可以处理大量数据和复杂的网站结构。使用Scrapy可以快速地获取所需的数据,从而为数据分析和挖掘提供支持。
### 回答2:
Python爬虫是一种快速、高效的网络爬虫工具,它利用Python语言及其强大的第三方库实现自动化爬取互联网信息的过程。而Scrapy是一个Python爬虫框架,可以帮助我们快速构建持续性的爬虫应用程序。
基于Scrapy框架的爬虫程序设计,首先需要明确自己的目标:确定目标网站、确定目标页面、确定目标信息。其次,在编写程序之前,我们需要构建好爬虫的数据模型,包括目标页面的结构、目标信息的抽取规则等。Scrapy框架的核心就是Spider,将会快速地处理目标页面,解析数据并且提取出所需信息。这些信息可以经过清洗、存储和分析等处理过程,最终达到我们的预期需求。
爬虫程序的主要步骤是:
1.创建一个Scrapy项目,包括spider、items、pipelines等。
2.定义spider,包括start_urls、parse等。
3.定义item,表示解析结果的结构。
4.定义pipeline,用于处理抓取到的数据。
5.运行爬虫程序并保存数据。
在使用Scrapy进行网络爬虫时,需要遵守相关法律法规,尊重目标网站的利益和知识产权,不进行违法、违规的操作,同时遵守robots.txt协议等规定,如不得爬取不允许抓取的页面。
总之,对于想要进行网络数据采集的人来说,Scrapy是一个非常强大的Python爬虫框架。它支持异步IO和协程等功能,可以快速、高效地提取目标数据。但是,使用Scrapy时需要遵循规则,合理利用,不进行违法、违规操作。
### 回答3:
Scrapy是基于Python语言的爬虫框架,它可以更好的帮我们实现爬取网站的任务。scrapy提供了一整套爬虫流程和一些基本机制,比如:异步处理,中间件机制,数据管道,数据解析等等。这些机制可以帮我们更加简便和高效地进行网络爬取任务。
使用Scrapy爬取网站有以下几个步骤:
1. 安装Scrapy框架
我们需要提前安装好Python和Scrapy框架。安装Scrapy比较方便,可以通过pip来安装,命令为:pip install scrapy。
2. 创建scrapy爬虫工程
我们需要使用scrapy startproject 项目名的命令来创建项目,并进入到项目的工程目录来创建爬虫内容,命令为:scrapy genspider 爬虫名 域名。
3. 配置scrapy爬虫的设置
进入到Scrapy工程目录,找到settings.py文件,修改里面的文件配置,包括:User-Agent,爬虫间隔时间,ip代理池设置等等。
4. 配置scrapy爬虫的项
在Spider中定义需要爬取的网站信息,包括URL地址和需要获取的数据。
5. 实现URL地址的解析
在Spider中写解析函数,对爬虫获取到的URL进行解析,获取需要的数据内容。
6. 爬虫启动
最后,使用命令scrapy crawl 爬虫名,启动爬虫。爬取的URL资源会被输出进行。如果爬虫爬取的URL过多,那么可以使用命令scrapy crawl 爬虫名 -o 文件名.格式名来保存爬虫获取到的数据内容。
总的来说,Scrapy是一个快速高效的爬虫框架,有着多种策略来处理不同种类的爬虫需求。使用Scrapy进行爬虫的开发,不仅能够为我们省去很多重复性工作,还能够提高我们的开发效率和爬虫的运行效率。
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交
window.csdn.csdnFooter.options = {
el: '.blog-footer-bottom',
type: 2
}
- 88
- 原创
- 1万+
- 周排名
- 1万+
- 总排名
- 6万+
- 访问
-
- 等级
- 1020
- 积分
- 23
- 粉丝
- 23
- 获赞
- 7
- 评论
- 179
- 收藏
私信
关注
(adsbygoogle = window.adsbygoogle || []).push({});
热门文章
-
【Linux|CentOS】配置防火墙
6353
-
【Edge】解决Edge游览器龟速下载问题
5563
-
【Java】某个公司采用公话传递数据,数据是四位的整数,在传递过程中数据加密
5064
-
【Java】输入圆形半径,求圆形的周长和圆形的面积,并将结果输出。
3545
-
【Java】稀疏数组介绍
2929
分类专栏
-
爬虫
4篇
-
python
2篇
-
Xpath
1篇
-
多线程
2篇
-
爬取图像
1篇
-
DOS
3篇
-
数组查找操作
2篇
-
排序算法
1篇
-
稀疏数组介绍
1篇
-
二分法检索
1篇
-
常用数组操作
1篇
-
二维数组
1篇
-
计算器
1篇
-
Java方法
2篇
-
生成javaDoc文档
1篇
-
基本数据类型
2篇
-
Scanner对象
1篇
-
运算符
1篇
-
JDK
1篇
-
Mark Down
1篇
-
Hello World
1篇
-
数据类型扩展及其面试题
-
控制语句相关题与for-each循环
-
面向过程和面向对象思想||对象和类
1篇
-
控制语句相关题与增强for循环
最新评论
您愿意向朋友推荐“博客详情页”吗?
-
强烈不推荐
-
不推荐
-
一般般
-
推荐
-
强烈推荐
提交
最新文章
-
【爬虫】4.5 实践项目——爬取当当网站图书数据
-
【爬虫】如何进一步的提高Scrapy爬虫的爬取速度?
-
【爬虫】4.4 Scrapy 爬取网站数据
2023年28篇
2022年61篇
目录
$("a.flexible-btn").click(function(){
$(this).parents('div.aside-box').removeClass('flexible-box');
$(this).parents("p.text-center").remove();
})
(adsbygoogle = window.adsbygoogle || []).push({});
目录
分类专栏
-
爬虫
4篇
-
python
2篇
-
Xpath
1篇
-
多线程
2篇
-
爬取图像
1篇
-
DOS
3篇
-
数组查找操作
2篇
-
排序算法
1篇
-
稀疏数组介绍
1篇
-
二分法检索
1篇
-
常用数组操作
1篇
-
二维数组
1篇
-
计算器
1篇
-
Java方法
2篇
-
生成javaDoc文档
1篇
-
基本数据类型
2篇
-
Scanner对象
1篇
-
运算符
1篇
-
JDK
1篇
-
Mark Down
1篇
-
Hello World
1篇
-
数据类型扩展及其面试题
-
控制语句相关题与for-each循环
-
面向过程和面向对象思想||对象和类
1篇
-
控制语句相关题与增强for循环
目录
var timert = setInterval(function() {
sideToolbar = $(“.csdn-side-toolbar”);
if (sideToolbar.length > 0) {
sideToolbar.css(‘cssText’, ‘bottom:64px !important;’)
clearInterval(timert);
}
}, 200);
为什么被折叠?
到【灌水乐园】发言
请填写红包祝福语或标题
个
红包个数最小为10个
元
红包金额最低5元
前往充值 >
打赏作者
-
-
即使再小的船也能远航
你的鼓励将是我创作的最大动力
¥4
¥6
¥10
¥20
余额支付
(余额:– )
扫码支付
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
点击重新获取
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
CSDN-Ada助手:
非常感谢博主的努力和创作,这篇博客对于学习Python多线程非常有帮助。博主讲解清晰详细,让初学者更容易理解掌握。希望博主能够继续创作,分享更多的知识和技巧,让更多人受益。再次感谢博主的付出!
为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。
即使再小的船也能远航:
pip不就可以呢么
m0_74026610:
怎么爬取前50
m0_73611149:
爬取学生信息在百度AIstudio 上面应该咋做
m0_73611149:
咋安装flask