python爬虫多个url_Python爬虫爬取网页中所有的url的多种实现方法

1ef9c95636fcf55321e8231d4b2e81f8.png

在使用python爬虫进行网络页面爬取的过程中,第一步肯定是要爬取url,若是面对网页中很多url,,又该如何爬取所以url呢?本文介绍Python爬虫爬取网页中所有的url的三种实现方法:1、使用BeautifulSoup快速提取所有url;2、使用Scrapy框架递归调用parse;3、在get_next_url()函数中调用自身,递归循环爬取所有url。

方法一:使用BeautifulSoup快速提取所有url

BeautifulSoup是一种可以从html和xml中快速提取内容的python库def getAllUrl(self,url):

import urllib.request

from bs4 import BeautifulSoup

html = urllib.request.urlopen(url).read().decode("utf-8")

soup = BeautifulSoup(html, features='html.parser')

tags = soup.find_all('a')

for tag in tags:

print(str(tag.get('href')).strip())

方法二:使用Scrapy框架递归调用parse

递归调用parse直到每个页面爬取完class QiubaiSpider(scrapy.Spider):

name = 'qiubai'

# allowed_domains = ['www.qiushibaike.com/text']

start_urls = ['https://www.qiushibaike.com/text/']

# 设计一个url模板

url = 'https://www.qiushibaike.com/text/page/%d/'

pageNum = 1

def parse(self, response):

div_list = response.xpath("//div[@id='content-left']/div")

for div in div_list:

....

# 将item提交给管道

yield item

# 多url, 请求的手动发送

if self.pageNum <= 13:  # 控制!否则无限递归了。。

self.pageNum += 1

print('爬第:%d 页' % self.pageNum)

new_url = self.url % self.pageNum

# callback 回调函数,页面进行解析

yield scrapy.Request(url=new_url, callback=self.parse)

方法三:在get_next_url()函数中调用自身,递归循环爬取所有url#!/usr/bin/env python

# -*- coding:utf-8 -*-

import requests

from bs4 import BeautifulSoup as Bs4

head_url = "http://www.xxx.com.cn"

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/72.0.3626.121 Safari/537.36"

}

def get_first_url():

list_href = []

reaponse = requests.get(head_url, headers=headers)

soup = Bs4(reaponse.text, "lxml")

urls_li = soup.select("#mainmenu_top > div > div > ul > li")

for url_li in urls_li:

urls = url_li.select("a")

for url in urls:

url_href = url.get("href")

list_href.append(head_url+url_href)

out_url = list(set(list_href))

return out_url

def get_next_url(urllist):

url_list = []

for url in urllist:

response = requests.get(url,headers=headers)

soup = Bs4(response.text,"lxml")

urls = soup.find_all("a")

if urls:

for url2 in urls:

url2_1 = url2.get("href")

if url2_1:

if url2_1[0] == "/":

url2_1 = head_url + url2_1

url_list.append(url2_1)

if url2_1[0:24] == "http://www.xxx.com.cn":

url2_1 = url2_1

url_list.append(url2_1)

else:

pass

else:

pass

else:

pass

else:

pass

url_list2 = set(url_list)

for url_ in url_list2:

res = requests.get(url_)

if res.status_code ==200:

print(url_)

print(len(url_list2))

get_next_url(url_list2)

if __name__ == "__main__":

urllist = get_first_url()

get_next_url(urllist)

以上就是Python爬虫爬取网页中所有的url的三种实现方法,希望能对你有所帮助哟~更多python爬虫进阶推荐:python爬虫进阶教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值