Oprava BeautifulSoup kód získat data ze všech stran a výstup do csv

0

Otázka

Úplný začátečník. Prosím, pomozte. Mám tento kód, který pracoval, když jsem se nesnažil, aby na výstupu .csv, ale místo toho měl příkaz pro tisk tam - takže jsem neměl poslední 2 řádky, nebo cokoliv vztahující se k proměnné 'data'. Tím, že "pracovali" myslím, že to vytisknout data ze všech 18 stránek.

Teď výstupy dat do .csv, ale jen z první stránky (url).

Vidím, že nejsem absolvování nexturl do pandy na konci - protože nevím, jak. Pomoc velmi ocenil.

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.marketresearch.com/search/results.asp?qtype=2&datepub=3&publisher=Technavio&categoryid=0&sortby=r'


def scrape_it(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    nexturl = soup.find_all(class_="standardLinkDkBlue")[-1]['href']
    stri = soup.find_all(class_="standardLinkDkBlue")[-1].string
    reports = soup.find_all("tr", {"class": ["SearchTableRowAlt", "SearchTableRow"]})
    data = []

    for report in reports:
        data.append({
               'title': report.find('a', class_='linkTitle').text,
               'price': report.find('div', class_='resultPrice').text,
               'date_author': report.find('div', class_='textGrey').text.replace(' | published by: TechNavio', ''),
               'detail_link': report.a['href']
        })

    if 'next' not in stri:
        print("All pages completed")
    else:
        scrape_it(nexturl)

    return data

myOutput = pd.DataFrame(scrape_it(url))
myOutput.to_csv(f'results-tec6.csv', header=False)
1

Nejlepší odpověď

0

Aby data globální, takže budete držet přidání do to během smyčky, spíše než re-vytvářet znovu. Pak se váš rekurzivní funkce být volána mimo DataFrame() volání, takže pak můžete projít data na pandy.

Konečně můžete projít cookie dostat maximální možné výsledky na požadavek na snížení počtu žádostí.

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.marketresearch.com/search/results.asp?qtype=2&datepub=3&publisher=Technavio&categoryid=0&sortby=r&page=1'

data = []

def scrape_it(url):
    page = requests.get(url, headers = {'Cookie':'ResultsPerPage=100'})
    soup = BeautifulSoup(page.text, 'html.parser')
    nexturl = soup.find_all(class_="standardLinkDkBlue")[-1]['href']
    stri = soup.find_all(class_="standardLinkDkBlue")[-1].string
    reports = soup.find_all("tr", {"class": ["SearchTableRowAlt", "SearchTableRow"]})
    
    for report in reports:
        data.append({
               'title': report.find('a', class_='linkTitle').text,
               'price': report.find('div', class_='resultPrice').text,
               'date_author': report.find('div', class_='textGrey').text.replace(' | published by: TechNavio', ''),
               'detail_link': report.a['href']
        })

    if 'next' not in stri:
        print("All pages completed")
    else:
        scrape_it(nexturl)

scrape_it(url)
myOutput = pd.DataFrame(data)
myOutput.to_csv(f'results-tec6.csv', header=False)
2021-11-24 07:13:46

Wow, děkuji moc. Funguje perfektně a já jsem se naučil o rozsahu údajů v Pythonu. Také děkuji za předvídání můj dotaz ohledně Výsledků Na Stránku. Viděl jsem, že to funguje s cookie, ale myslel jsem, že jsem potřeboval chcete-li zahájit relaci, takže jsem nainstaloval HTMLSession a chtěl požádat o použití je pro přesný účel jsi viděl. To je skvělé, a je to opravdu urychluje skřípání čas!
Michael Wiz

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................