Как мне искать на сайте, используя модуль «запросы»? - PullRequest
0 голосов
/ 03 марта 2019

Я хочу искать разные названия компаний на сайте.Ссылка на сайт: https://www.firmenwissen.de/index.html

На этом сайте я хочу использовать поисковую систему и поисковые компании.Вот код, который я пытаюсь использовать:

from bs4 import BeautifulSoup as BS
import requests
import re

companylist = ['ABEX Dachdecker Handwerks-GmbH']

url = 'https://www.firmenwissen.de/index.html'

payloads = {
        'searchform': 'UFT-8',
        'phrase':'ABEX Dachdecker Handwerks-GmbH',
        "mainSearchField__button":'submit'
        }

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

html = requests.post(url, data=payloads, headers=headers)
soup = BS(html.content, 'html.parser')
link_list= []

links = soup.findAll('a')

for li in links:
    link_list.append(li.get('href'))
print(link_list)

Этот код должен принести мне следующую страницу с информацией о компании.Но, к сожалению, он возвращает только домашнюю страницу.Как я могу это сделать?

1 Ответ

0 голосов
/ 03 марта 2019

Измените ваш начальный URL, который вы ищете.Возьмите только соответствующие href s и добавьте в набор, чтобы не было дубликатов (или измените селектор, чтобы вернуть только одно совпадение, если это возможно);добавьте эти элементы в окончательный набор для зацикливания, чтобы обеспечить зацикливание только необходимого количества ссылок.Я использовал Session при условии, что вы будете повторять это для многих компаний.

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

Это схема.

from bs4 import BeautifulSoup as BS
import requests
from selenium import webdriver

d = webdriver.Chrome()
companyList = ['ABEX Dachdecker Handwerks-GmbH','SUCHMEISTEREI GmbH']

url = 'https://www.firmenwissen.de/ergebnis.html'
baseUrl = 'https://www.firmenwissen.de'
headers = {'User-Agent': 'Mozilla/5.0'}

finalLinks = set()

## searches section; gather into set

with requests.Session() as s:
    for company in companyList:
        payloads = {
        'searchform': 'UFT-8',
        'phrase':company,
        "mainSearchField__button":'submit'
        }

        html = s.post(url, data=payloads, headers=headers)
        soup = BS(html.content, 'lxml')

        companyLinks = {baseUrl + item['href'] for item in soup.select("[href*='firmeneintrag/']")}
        # print(soup.select_one('.fp-result').text)
        finalLinks = finalLinks.union(companyLinks)

for item in finalLinks:
    d.get(item)
    info  = d.find_element_by_css_selector('.yp_abstract_narrow')
    address =  d.find_element_by_css_selector('.yp_address')
    print(info.text, address.text)

d.quit()

Только первые ссылки:

from bs4 import BeautifulSoup as BS
import requests
from selenium import webdriver

d = webdriver.Chrome()
companyList = ['ABEX Dachdecker Handwerks-GmbH','SUCHMEISTEREI GmbH', 'aktive Stuttgarter']

url = 'https://www.firmenwissen.de/ergebnis.html'
baseUrl = 'https://www.firmenwissen.de'
headers = {'User-Agent': 'Mozilla/5.0'}

finalLinks = []

## searches section; add to list

with requests.Session() as s:
    for company in companyList:
        payloads = {
        'searchform': 'UFT-8',
        'phrase':company,
        "mainSearchField__button":'submit'
        }

        html = s.post(url, data=payloads, headers=headers)
        soup = BS(html.content, 'lxml')

        companyLink = baseUrl + soup.select_one("[href*='firmeneintrag/']")['href']
        finalLinks.append(companyLink)

for item in set(finalLinks):
    d.get(item)
    info  = d.find_element_by_css_selector('.yp_abstract_narrow')
    address =  d.find_element_by_css_selector('.yp_address')
    print(info.text, address.text)
d.quit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...