Как собирать непрерывный набор веб-страниц с использованием python?

78
8

https://example.net/users/x

Здесь x - это число, которое варьируется от 1 до 200000. Я хочу запустить цикл, чтобы получить все URL-адреса и извлечь содержимое из каждого URL-адреса с помощью красивого супа.

from bs4 import BeautifulSoup
from urllib.request import urlopen
import re
content = urlopen(re.compile(r"https://example.net/users/[0-9]//"))
soup = BeautifulSoup(content)

Правильно ли это? Я должен выполнить две вещи.

Получите непрерывный набор URL-адресов Извлеките и сохраните содержимое с каждой страницы /URL.

ОБНОВИТЬ:

Я должен получить только одно значение от каждой из веб-страниц.

soup = BeautifulSoup(content)
divTag = soup.find_all("div", {"class":"classname"})
for tag in divTag:
ulTags = tag.find_all("ul", {"class":"classname"})
for tag in ulTags:
aTags = tag.find_all("a",{"class":"classname"})
for tag in aTags:
name = tag.find('img')['alt']
print(name)

спросил(а) 2021-01-19T17:24:42+03:00 6 месяцев, 2 недели назад
1
Решение
65

Если вам просто нужно содержимое веб-страницы, возможно, вы можете использовать lxml, из которого вы могли бы проанализировать содержимое. Что-то вроде:

from lxml import etree
r = requests.get('https://example.net/users/x')
dom = etree.fromstring(r.text)
# parse seomthing
title = dom.xpath('//h1[@class="title"]')[0].text

Кроме того, если вы очищаете 10 или 100 тысяч страниц, вы можете посмотреть что-то вроде grequests, где вы можете выполнять несколько асинхронных HTTP-запросов.

ответил(а) 2021-01-19T17:24:42+03:00 6 месяцев, 2 недели назад
64

Вы можете попробовать следующее:

import urllib2
import shutil

urls = []
for i in range(10):
urls.append(str('https://www.example.org/users/' + i))

def getUrl(urls):
for url in urls:
# Only a file_name based on url string
file_name = url.replace('https://', '').replace('.', '_').replace('/', '_')
response = urllib2.urlopen(url)
with open(file_name, 'wb') as out_file:
shutil.copyfileobj(response, out_file)

getUrl(urls)

ответил(а) 2021-01-19T17:24:42+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема