当前位置:首页 » 编程语言 » python爬虫翻页

python爬虫翻页

发布时间: 2022-11-18 19:13:59

A. python爬虫怎么爬到翻页的内容

首先要弄清楚你获取第一页方式是什么,post还是get,参数是什么,比如找到其中一个参数是page:1。那么就可以通过修改参数为page:2来爬取下一页了。

可能通过谷歌的“检查”来获取具体的请求头和请求参数等。

B. 利用Python爬取数据翻页时,一共100页,我只想要5页的数据,用什么代码停止翻页呢

1、首先分析页面源代码中翻页处的特征,按规则取下一页地址适合页面地址不连续时,可通过正则表达式实现,如果页面地址为连续的,则直接按连续的地址获取数据。
2、按以上特征获取后面地址,通过urllib.request.urlopen(url)得到首页面的数据。可以通过正则表达式获取数据,也可按特征字符串定来取到数据。
3、如为规则网地址方式,可以使用线程来提高效率。

C. Python爬虫,javascript:__doPostBack()实现翻页,怎样爬取各页的内容

可以检查下network,但能否通过接口爬,通过接口参数控制分页,方便的话可以把要爬取的网站说下,我在帮你分析具体办法

D. python爬虫是干嘛的

爬虫技术是一种自动化程序。

爬虫就是一种可以从网页上抓取数据信息并保存的自动化程序,它的原理就是模拟浏览器发送网络请求,接受请求响应,然后按照一定的规则自动抓取互联网数据。

搜索引擎通过这些爬虫从一个网站爬到另一个网站,跟踪网页中的链接,访问更多的网页,这个过程称为爬行,这些新的网址会被存入数据库等待搜索。简而言之,爬虫就是通过不间断地访问互联网,然后从中获取你指定的信息并返回给你。而我们的互联网上,随时都有无数的爬虫在爬取数据,并返回给使用者。

爬虫技术的功能

1、获取网页

获取网页可以简单理解为向网页的服务器发送网络请求,然后服务器返回给我们网页的源代码,其中通信的底层原理较为复杂,而Python给我们封装好了urllib库和requests库等,这些库可以让我们非常简单的发送各种形式的请求。

2、提取信息

获取到的网页源码内包含了很多信息,想要进提取到我们需要的信息,则需要对源码还要做进一步筛选。可以选用python中的re库即通过正则匹配的形式去提取信息,也可以采用BeautifulSoup库(bs4)等解析源代码,除了有自动编码的优势之外,bs4库还可以结构化输出源代码信息,更易于理解与使用。

3、保存数据

提取到我们需要的有用信息后,需要在Python中把它们保存下来。可以使用通过内置函数open保存为文本数据,也可以用第三方库保存为其它形式的数据,例如可以通过pandas库保存为常见的xlsx数据,如果有图片等非结构化数据还可以通过pymongo库保存至非结构化数据库中。

E. 如何用Python做爬虫

1)首先你要明白爬虫怎样工作。

想象你是一只蜘蛛,现在你被放到了互联“网”上。那么,你需要把所有的网页都看一遍。怎么办呢?没问题呀,你就随便从某个地方开始,比如说人民日报的首页,这个叫initial pages,用$表示吧。

在人民日报的首页,你看到那个页面引向的各种链接。于是你很开心地从爬到了“国内新闻”那个页面。太好了,这样你就已经爬完了俩页面(首页和国内新闻)!暂且不用管爬下来的页面怎么处理的,你就想象你把这个页面完完整整抄成了个html放到了你身上。

突然你发现, 在国内新闻这个页面上,有一个链接链回“首页”。作为一只聪明的蜘蛛,你肯定知道你不用爬回去的吧,因为你已经看过了啊。所以,你需要用你的脑子,存下你已经看过的页面地址。这样,每次看到一个可能需要爬的新链接,你就先查查你脑子里是不是已经去过这个页面地址。如果去过,那就别去了。

好的,理论上如果所有的页面可以从initial page达到的话,那么可以证明你一定可以爬完所有的网页。

那么在python里怎么实现呢?
很简单

import Queue

initial_page = "初始化页"

url_queue = Queue.Queue()
seen = set()

seen.insert(initial_page)
url_queue.put(initial_page)

while(True): #一直进行直到海枯石烂
if url_queue.size()>0:
current_url = url_queue.get() #拿出队例中第一个的url
store(current_url) #把这个url代表的网页存储
for next_url in extract_urls(current_url): #提取把这个url里链向的url
if next_url not in seen:
seen.put(next_url)
url_queue.put(next_url)
else:
break

写得已经很伪代码了。

所有的爬虫的backbone都在这里,下面分析一下为什么爬虫事实上是个非常复杂的东西——搜索引擎公司通常有一整个团队来维护和开发。

2)效率
如果你直接加工一下上面的代码直接运行的话,你需要一整年才能爬下整个豆瓣的内容。更别说Google这样的搜索引擎需要爬下全网的内容了。

问题出在哪呢?需要爬的网页实在太多太多了,而上面的代码太慢太慢了。设想全网有N个网站,那么分析一下判重的复杂度就是N*log(N),因为所有网页要遍历一次,而每次判重用set的话需要log(N)的复杂度。OK,OK,我知道python的set实现是hash——不过这样还是太慢了,至少内存使用效率不高。

通常的判重做法是怎样呢?Bloom Filter. 简单讲它仍然是一种hash的方法,但是它的特点是,它可以使用固定的内存(不随url的数量而增长)以O(1)的效率判定url是否已经在set中。可惜天下没有白吃的午餐,它的唯一问题在于,如果这个url不在set中,BF可以100%确定这个url没有看过。但是如果这个url在set中,它会告诉你:这个url应该已经出现过,不过我有2%的不确定性。注意这里的不确定性在你分配的内存足够大的时候,可以变得很小很少。一个简单的教程:Bloom Filters by Example

注意到这个特点,url如果被看过,那么可能以小概率重复看一看(没关系,多看看不会累死)。但是如果没被看过,一定会被看一下(这个很重要,不然我们就要漏掉一些网页了!)。 [IMPORTANT: 此段有问题,请暂时略过]

好,现在已经接近处理判重最快的方法了。另外一个瓶颈——你只有一台机器。不管你的带宽有多大,只要你的机器下载网页的速度是瓶颈的话,那么你只有加快这个速度。用一台机子不够的话——用很多台吧!当然,我们假设每台机子都已经进了最大的效率——使用多线程(python的话,多进程吧)。

3)集群化抓取
爬取豆瓣的时候,我总共用了100多台机器昼夜不停地运行了一个月。想象如果只用一台机子你就得运行100个月了...

那么,假设你现在有100台机器可以用,怎么用python实现一个分布式的爬取算法呢?

我们把这100台中的99台运算能力较小的机器叫作slave,另外一台较大的机器叫作master,那么回顾上面代码中的url_queue,如果我们能把这个queue放到这台master机器上,所有的slave都可以通过网络跟master联通,每当一个slave完成下载一个网页,就向master请求一个新的网页来抓取。而每次slave新抓到一个网页,就把这个网页上所有的链接送到master的queue里去。同样,bloom filter也放到master上,但是现在master只发送确定没有被访问过的url给slave。Bloom Filter放到master的内存里,而被访问过的url放到运行在master上的Redis里,这样保证所有操作都是O(1)。(至少平摊是O(1),Redis的访问效率见:LINSERT – Redis)

考虑如何用python实现:
在各台slave上装好scrapy,那么各台机子就变成了一台有抓取能力的slave,在master上装好Redis和rq用作分布式队列。

代码于是写成

#slave.py

current_url = request_from_master()
to_send = []
for next_url in extract_urls(current_url):
to_send.append(next_url)

store(current_url);
send_to_master(to_send)

#master.py
distributed_queue = DistributedQueue()
bf = BloomFilter()

initial_pages = "www.renmingribao.com"

while(True):
if request == 'GET':
if distributed_queue.size()>0:
send(distributed_queue.get())
else:
break
elif request == 'POST':
bf.put(request.url)

好的,其实你能想到,有人已经给你写好了你需要的:darkrho/scrapy-redis · GitHub

4)展望及后处理
虽然上面用很多“简单”,但是真正要实现一个商业规模可用的爬虫并不是一件容易的事。上面的代码用来爬一个整体的网站几乎没有太大的问题。

但是如果附加上你需要这些后续处理,比如

有效地存储(数据库应该怎样安排)

有效地判重(这里指网页判重,咱可不想把人民日报和抄袭它的大民日报都爬一遍)

有效地信息抽取(比如怎么样抽取出网页上所有的地址抽取出来,“朝阳区奋进路中华道”),搜索引擎通常不需要存储所有的信息,比如图片我存来干嘛...

及时更新(预测这个网页多久会更新一次)

如你所想,这里每一个点都可以供很多研究者十数年的研究。虽然如此,
“路漫漫其修远兮,吾将上下而求索”。

所以,不要问怎么入门,直接上路就好了:)

F. 【Python爬虫】分析网页真实请求

1、抓取网页、分析请求
2、解析网页、寻找数据
3、储存数据、多页处理

翻页有规律:
很多网址在第一页时并没有变化,多翻下一页后规律就出来,比如 豆瓣第一页 和 豆瓣第三页

发现start为40,limit=20,所以猜测start=0就是第一页,每页显示20条数据,对于第三页显示的参数可以一个个删除验证,可以减去不必要的参数, 但是删除前一定要做好数据的对比

(1) 文本框输入后产生一个请求,如常见的登录、注册页面
Referer:表示当前请求的来源
Request URL:表示实际请求地址

翻页后URL不变,该如何寻找请求?
如: http://www.zkh360.com/zkh_catalog/3.html

通过对比可以发现网站是通过pageIndex参数控制翻页的,?表示连接

接下来用抓包工具分析下 ,从第四页开始看URL就知道了,但是前面几面需要查看请求的参数,这里偏多,就切换到【Inspectors--Webforms】选项,看的比较直观

类似的网站还有 今日头条 ,有兴趣的朋友可以去研究下
(可通过获取max_behot_time的值而改变as和cp)

G. 如何用python实现爬虫抓取网页时自动翻页

看了你这个网站,下一页每次都不一样,每一页的链接也不一样,这种你靠分析肯定是不行的,因为你永远都不知道会出来什么内容,建议你用八爪鱼采集器,这是目前最好用的网页数据采集利器,解决这种问题很轻松的。

H. 爬虫链接翻页失败了怎么办

我知道的有这几种:robots.txt,直接不显示链接,ajax,nofollow等

I. Python编程基础之(五)Scrapy爬虫框架

经过前面四章的学习,我们已经可以使用Requests库、Beautiful Soup库和Re库,编写基本的Python爬虫程序了。那么这一章就来学习一个专业的网络爬虫框架--Scrapy。没错,是框架,而不是像前面介绍的函数功能库。

Scrapy是一个快速、功能强大的网络爬虫框架。

可能大家还不太了解什么是框架,爬虫框架其实是实现爬虫功能的一个软件结构和功能组件的集合。

简而言之, Scrapy就是一个爬虫程序的半成品,可以帮助用户实现专业的网络爬虫。

使用Scrapy框架,不需要你编写大量的代码,Scrapy已经把大部分工作都做好了,允许你调用几句代码便自动生成爬虫程序,可以节省大量的时间。

当然,框架所生成的代码基本是一致的,如果遇到一些特定的爬虫任务时,就不如自己使用Requests库搭建来的方便了。

PyCharm安装

测试安装:

出现框架版本说明安装成功。

掌握Scrapy爬虫框架的结构是使用好Scrapy的重中之重!

先上图:

整个结构可以简单地概括为: “5+2”结构和3条数据流

5个主要模块(及功能):

(1)控制所有模块之间的数据流。

(2)可以根据条件触发事件。

(1)根据请求下载网页。

(1)对所有爬取请求进行调度管理。

(1)解析DOWNLOADER返回的响应--response。

(2)产生爬取项--scraped item。

(3)产生额外的爬取请求--request。

(1)以流水线方式处理SPIDER产生的爬取项。

(2)由一组操作顺序组成,类似流水线,每个操作是一个ITEM PIPELINES类型。

(3)清理、检查和查重爬取项中的HTML数据并将数据存储到数据库中。

2个中间键:

(1)对Engine、Scheler、Downloader之间进行用户可配置的控制。

(2)修改、丢弃、新增请求或响应。

(1)对请求和爬取项进行再处理。

(2)修改、丢弃、新增请求或爬取项。

3条数据流:

(1):图中数字 1-2

1:Engine从Spider处获得爬取请求--request。

2:Engine将爬取请求转发给Scheler,用于调度。

(2):图中数字 3-4-5-6

3:Engine从Scheler处获得下一个要爬取的请求。

4:Engine将爬取请求通过中间件发送给Downloader。

5:爬取网页后,Downloader形成响应--response,通过中间件发送给Engine。

6:Engine将收到的响应通过中间件发送给Spider处理。

(3):图中数字 7-8-9

7:Spider处理响应后产生爬取项--scraped item。

8:Engine将爬取项发送给Item Pipelines。

9:Engine将爬取请求发送给Scheler。

任务处理流程:从Spider的初始爬取请求开始爬取,Engine控制各模块数据流,不间断从Scheler处获得爬取请求,直至请求为空,最后到Item Pipelines存储数据结束。

作为用户,只需配置好Scrapy框架的Spider和Item Pipelines,也就是数据流的入口与出口,便可完成一个爬虫程序的搭建。Scrapy提供了简单的爬虫命令语句,帮助用户一键配置剩余文件,那我们便来看看有哪些好用的命令吧。

Scrapy采用命令行创建和运行爬虫

PyCharm打开Terminal,启动Scrapy:

Scrapy基本命令行格式:

具体常用命令如下:

下面用一个例子来学习一下命令的使用:

1.建立一个Scrapy爬虫工程,在已启动的Scrapy中继续输入:

执行该命令,系统会在PyCharm的工程文件中自动创建一个工程,命名为pythonDemo。

2.产生一个Scrapy爬虫,以教育部网站为例http://www.moe.gov.cn:

命令生成了一个名为demo的spider,并在Spiders目录下生成文件demo.py。

命令仅用于生成demo.py文件,该文件也可以手动生成。

观察一下demo.py文件:

3.配置产生的spider爬虫,也就是demo.py文件:

4.运行爬虫,爬取网页:

如果爬取成功,会发现在pythonDemo下多了一个t20210816_551472.html的文件,我们所爬取的网页内容都已经写入该文件了。

以上就是Scrapy框架的简单使用了。

Request对象表示一个HTTP请求,由Spider生成,由Downloader执行。

Response对象表示一个HTTP响应,由Downloader生成,有Spider处理。

Item对象表示一个从HTML页面中提取的信息内容,由Spider生成,由Item Pipelines处理。Item类似于字典类型,可以按照字典类型来操作。

J. python爬虫怎么爬取webpack打包过页面的

动态加载的数据都是用户通过鼠标或键盘执行了一定的动作之后加载出来的。所以我们通过提供的工具调用本地的浏览器,让程序替代人的行为,滚动页面,点击按钮,提交表单等等。从而获取到想要的数据。所以我认为,使用s方法爬取动态页面的中心思想是模拟人的行为。对于简单的有限爬取任务,若可以通过代码模拟逻辑,首选这种方案,例如,在搜索引擎中,翻页这个动作是靠js触发的.模拟似乎还是很难,然后我注意到他页面的第二个,似乎后就可以翻页,试了一下果然如此.

热点内容
lc脚本编辑器 发布:2025-01-15 07:18:59 浏览:528
追剧脚本 发布:2025-01-15 07:00:39 浏览:446
c语言字符串库函数 发布:2025-01-15 06:54:49 浏览:526
c语言的工作 发布:2025-01-15 06:50:50 浏览:521
口语交际访问 发布:2025-01-15 06:44:13 浏览:329
编程少儿学习 发布:2025-01-15 06:39:03 浏览:504
服务器搭建怎么设置 发布:2025-01-15 06:39:01 浏览:152
格鲁尔要什么配置 发布:2025-01-15 06:26:56 浏览:857
linux下安装jdk 发布:2025-01-15 06:03:05 浏览:545
服务器拷数据到电脑 发布:2025-01-15 05:58:19 浏览:481