荣耀华为手机商城官方网站,WordPress主题开源版,做网站和APP需要注册公司吗,网站建设的利弊一、深度爬取 深度爬取是指在网络爬虫中#xff0c;获取网页上的所有链接并递归地访问这些链接#xff0c;以获取更深层次的页面数据。 通常#xff0c;一个简单的爬虫只会获取到初始页面上的链接#xff0c;并不会进一步访问这些链接上的其他页面。而深度爬取则会不断地获…一、深度爬取 深度爬取是指在网络爬虫中获取网页上的所有链接并递归地访问这些链接以获取更深层次的页面数据。 通常一个简单的爬虫只会获取到初始页面上的链接并不会进一步访问这些链接上的其他页面。而深度爬取则会不断地获取链接并继续访问这些链接上的页面直到达到设定的深度限制或者没有更多的链接可供访问为止。这样可以更全面地获取网页上的数据并且可以发现更多的链接。但是需要注意的是深度爬取需要谨慎操作以免对目标网站造成过大的负载。 二、爬取豆瓣电影的电影链接中的数据 比如点开下列页面中的链接得到另一个页面而另一个页面就有很多新的数据就可以爬取更多的东西当然了点开后的链接也可以下次爬取只需要对爬到的URL再次进行发送get请求即可。 点开蓝色选中的链接得到关于这个电影的全部信息 上图中所有的数据都可以爬取下面我们就演示一下对电影目录一整页的数据进行深度爬取 三、实战爬取整页电影目录的数据 1、获取这一整页电影的所有URL 经过前面几节课我们也都学习了怎么样去获取网页信息因为这些电影都是存放在一个列表里的在点击网络-元素-在网页中选择一个元素检查的标识当选中网页中可以看到各个板块的排列位置,或者也可以在‘元素’里看到当前页面电影信息都存放在li标签下所以可以通过下列图片得到单个电影的URL下面代码部分就是爬取到了所有电影的URL了 import requests
from lxml import etree
import fake_useragentif __name__ __main__:head{User-Agent:fake_useragent.UserAgent().random #随机生成一个UA标识}#获取当前页面的URLurlhttps://movie.douban.com/top250#发送get请求responserequests.get(url,headershead)#返回获取到的页面源码lxml_inforesponse.text#解析获取到的信息treeetree.HTML(lxml_info)#利用xpath定位到所有电影存放的标签下filmtree.xpath(//ol[classgrid_view]/li)#对获取到的所有li标签进行遍历循环for li in film:#当前位置在li标签用xpath读取到电影链接,再通过join去除括号film_url.join(li.xpath(./div/div[2]/div[1]/a/href))print(film_url)
2、爬取链接内的页面信息
通过上一步我们已经得到所有电影的URL了那么下一步则是对这些URL继续进行get请求 for li in film:#当前位置在li标签用xpath读取到电影链接,再通过join去除括号film_url.join(li.xpath(./div/div[2]/div[1]/a/href))#对获取到的URL发送get请求resrequests.get(film_url,headershead)#打印请求到的信息res_tres.text 获取到电影页面信息后我们继续像上部一样对这段数据进行处理即以下代码 res_tres.text# print(res_t)#解析获取到的信息tree_urletree.HTML(res_t)#定位到所需要信息的位置,比如我们要爬取他的剧情简介#首先是电影名称fil_name.join(tree_url.xpath(//body/div[3]/div[1]/h1/span[1]/text()))#其次是电影的简介内容#因为此处有两种类型的电影简介标签位置span[1]和span[2]所以做一个判断如果电影1有内容那么打印电影1反之打印电影2if .join(tree_url.xpath(//div[classrelated-info]/div[1]/span[2]/text())):print(fil_name)print(.join(tree_url.xpath(//div[classrelated-info]/div[1]/span[2]/text())).strip())else:film_jianjie .join(tree_url.xpath(//div[classrelated-info]/div[1]/span[1]/text()))print(fil_name)print(film_jianjie.strip())
注意此处做了一个判断因为其中电影的标签存放位置略有不同即span[1]和span[2]
如下图肖申克的救赎其简介存放在标签span[2]下而霸王别姬存放在span[1]下 霸王别姬如下 3、完整代码如下
import requests
from lxml import etree
import fake_useragentif __name__ __main__:head{User-Agent:fake_useragent.UserAgent().random #随机生成一个UA标识}#获取当前页面的URLurlhttps://movie.douban.com/top250#发送get请求responserequests.get(url,headershead)#返回获取到的页面源码lxml_inforesponse.text#解析获取到的信息treeetree.HTML(lxml_info)#利用xpath定位到所有电影存放的标签下filmtree.xpath(//ol[classgrid_view]/li)#对获取到的所有li标签进行遍历循环for li in film:#当前位置在li标签用xpath读取到电影链接,再通过join去除括号film_url.join(li.xpath(./div/div[2]/div[1]/a/href))#对获取到的URL发送get请求resrequests.get(film_url,headershead)#打印请求到的信息res_tres.text# print(res_t)#解析获取到的信息tree_urletree.HTML(res_t)#定位到所需要信息的位置,比如我们要爬取他的剧情简介#首先是电影名称fil_name.join(tree_url.xpath(//body/div[3]/div[1]/h1/span[1]/text()))#其次是电影的简介内容#因为此处有两种类型的电影简介标签位置span[1]和span[2]所以做一个判断如果电影1有内容那么打印电影1反之打印电影2if .join(tree_url.xpath(//div[classrelated-info]/div[1]/span[2]/text())):print(fil_name)print(.join(tree_url.xpath(//div[classrelated-info]/div[1]/span[2]/text())).strip())else:film_jianjie .join(tree_url.xpath(//div[classrelated-info]/div[1]/span[1]/text()))print(fil_name)print(film_jianjie.strip()) 另外可以在后面加一条创建新文件的代码用来存放这些数据已达到获取信息存放到本地保存的目的。