Как мне лучше залить oop в мой парсер? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь очистить страницу поиска веб-сайтов, заставляя парсер очищать ссылки каждого элемента на странице, после чего очищенные ссылки снова анализируются, и определенная информация также извлекается из этих ссылок. Проблема, с которой я сталкиваюсь, заключается в том, что если исходные ссылки были очищены, я хочу l oop через каждую из этих ссылок и очистить данные от них, но в настоящее время он очищает только первое значение в списке ссылок. Думаю, проблема в моем для l oop.

Вот мой текущий код.

productLinks = []
carMake = [] 


url = "https://buy.cars45.com/cars"
headers = {"Accept-Language": "en-US, en;q=0.5"}


searchResults = requests.get(url, headers=headers)
soup = BeautifulSoup(searchResults.text, "html.parser")

searchlinks = soup.find_all('div', class_='product_box')

for i in searchlinks:
    a = i.find('a').get('href')
    if a:
        productLinks.append(a)
#         print(a)
    else:
        productLinks.append('kNone')


for j in productLinks:
    productPage = requests.get(j, headers=headers)
     soup2 = BeautifulSoup(productPage.text, "html.parser")

     details = soup2.find_all('span', class_='float-right')

     make = details[0].text
     carName.append(make)

Но он просто возвращает первую машину, повторенную много раз в качестве вывода.

1 Ответ

1 голос
/ 27 мая 2020

Если я правильно понял, это должно сработать

import requests
from bs4 import BeautifulSoup
url ='https://www.lbbusinessjournal.com/'

r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')

links = []

for post in soup.find_all(['h3', 'li'], class_=['entry-title td-module-title', 'menu-item']):
  link = post.find('a')
  if link:
      link = link.get('href')
      links.append(link)
      print(len(link))
      print(link)

for i in links:
  r2 = requests.get(i)
  soup1 = BeautifulSoup(r2.text, 'html.parser')

  for post1 in soup1.find_all('h3', class_='entry-title td-module-title'):
      link1 = post1.find('a')
      if link1: 
          print(link1.text)

Когда я запустил ваш код, он дал несколько ошибок, поэтому, если это была ваша проблема, вы должны проверить, вернул ли post1.find('a') None. Это может произойти, если post1 не включает тег <a>.

...