Соскребая HTML из массива ссылок - PullRequest
1 голос
/ 20 сентября 2019

Я собрал скрипт, который собирает различные страницы товаров на странице поиска товаров и собирает заголовок / цену / ссылку на полное описание товара.Он был разработан с использованием цикла и добавления +i на каждую страницу (www.exmple.com/search/laptops?page=(1+i)) до появления ошибки 200.

Название продукта содержитссылка на полное описание фактического продукта - теперь я хотел бы "посетить" эту ссылку и выполнить очистку основных данных из полного описания продукта.

У меня есть массив, созданный для ссылок, извлеченных изстраница поиска продукта - я думаю, что это был бы хороший стартовый блок.

Как бы я мог извлечь HTML-код из ссылок в массиве (т. е. зайти на страницу отдельного продукта и взятьфактические данные о продукте, а не только сводка со страницы поиска продуктов)?

Вот текущие результаты, которые я получаю в формате CSV:

 Link                                Title                 Price
 example.com/laptop/product1        laptop                 £400
 example.com/laptop/product2        laptop                 £400
 example.com/laptop/product3        laptop                 £400
 example.com/laptop/product4        laptop                 £400
 example.com/laptop/product5        laptop                 £400

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Сначала получите ссылку на все страницы. Затем повторите этот список и получите любую информацию, которая вам нужна, с отдельных страниц.У меня есть только значения спецификации здесь. Вы делаете любое значение, которое хотите.

from bs4 import BeautifulSoup
import requests
all_links=[]
url="https://www.guntrader.uk/dealers/street/ivythorn-sporting/guns?page={}"
for page in range(1,3):
  res=requests.get(url.format(page)).text
  soup=BeautifulSoup(res,'html.parser')
  for link in soup.select('a[href*="/dealers/street"]'):
      all_links.append("https://www.guntrader.uk" + link['href'])

print(len(all_links))
for a_link in all_links:
    res = requests.get(a_link).text
    soup = BeautifulSoup(res, 'html.parser')
    if soup.select_one('div.gunDetails'):
      print(soup.select_one('div.gunDetails').text)

Вывод будет похож на каждую страницу.

Specifications

Make:Schultz & Larsen
Model:VICTORY GRADE 2 SPIRAL-FLUTED
Licence:Firearm
Orient.:Right Handed
Barrel:23"
Stock:14"
Weight:7lb.6oz.
Origin:Other
Circa:2017
Cased:Makers-Plastic
Serial #:DK-V11321/P20119
Stock #:190912/002
Condition:Used



Specifications

Make:Howa
Model:1500 MINI ACTION [ 1-7'' ] MDT ORYX CHASSIS
Licence:Firearm
Orient.:Right Handed
Barrel:16"
Stock:13 ½"
Weight:7lb.15oz.
Origin:Other
Circa:2019
Cased:Makers-Plastic
Serial #:B550411
Stock #:190905/002
Condition:New



Specifications

Make:Weihrauch
Model:HW 35
Licence:No Licence
Orient.:Right Handed
Scope:Simmons 3-9x40
Total weight:9lb.3oz.
Origin:German
Circa:1979
Serial #:746753
Stock #:190906/004
Condition:Used

Если вы хотите получитьназвание и цена каждой ссылки. Попробуйте это.

from bs4 import BeautifulSoup
import requests
all_links=[]
url="https://www.guntrader.uk/dealers/street/ivythorn-sporting/guns?page={}"
for page in range(1,3):
  res=requests.get(url.format(page)).text
  soup=BeautifulSoup(res,'html.parser')
  for link in soup.select('a[href*="/dealers/street"]'):
      all_links.append("https://www.guntrader.uk" + link['href'])

print(len(all_links))
for a_link in all_links:
    res = requests.get(a_link).text
    soup = BeautifulSoup(res, 'html.parser')
    if soup.select_one('h1[itemprop="name"]'):
      print("Title:" + soup.select_one('h1[itemprop="name"]').text)
      print("Price:" + soup.select_one('p.price').text)
1 голос
/ 20 сентября 2019

Просто извлеките ту часть строки, которая является URL-адресом из заголовка проекта.выполните:

import requests
res = requests.get(<url-extracted-above->)
res.content

, затем с помощью пакета beautifulsoup выполните:

from bs4 import BeautifulSoup
soup = BeautifulSoup(page.content, 'html.parser')

и продолжайте повторять, просто принимая этот html-формат в виде дерева XML.Вы можете ссылаться на эту ссылку легко найти по запросам и Beautifulsoup: https://www.dataquest.io/blog/web-scraping-tutorial-python/

Надеюсь, это поможет?не уверен Если я правильно понял ваш вопрос, но все, что здесь можно сделать, можно сделать с помощью библиотек python urllib2 / reports / beautifulSoup / json / xml, когда он справляется с веб-очисткой / анализом.

...