Python Web Scraping с несколькими URL + объединение данных - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь сделать следующее:

  • Взять несколько URL-адресов.
  • Взять h2-текст в каждом URL-адресе.
  • Объединить h2-текст, а затем написать csv .

В этом коде я сделал: взять один URL. Возьмите h2 текст в URL.

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq

page_url = "https://example.com/ekonomi/20200108/"

#i am trying to do | urls = ['https://example.com/ekonomi/20200114/', 'https://example.com/ekonomi/20200113/', 'https://example.com/ekonomi/20200112/', 'https://example.com/ekonomi/20200111/]

uClient = uReq(page_url)

page_soup = soup(uClient.read(), "html.parser")
uClient.close()

# finds each product from the store page
containers = page_soup.findAll("div", {"class": "b-plainlist__info"})

out_filename = "output.csv"

headers = "title \n"


f = open(out_filename, "w")
f.write(headers)

container = containers[0]

for container in containers:
    title = container.h2.get_text()

    f.write(title.replace(",", " ") + "\n")

f.close()  # Close the file

1 Ответ

1 голос
/ 14 января 2020

Если ваша итерация через containers правильная, это должно работать:

Вы хотите выполнить итерацию по URL. Каждый URL захватит заголовок и добавит его в список. Затем просто создайте серию с этим списком и напишите в CSV с Pandas:

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq
import pandas as pd


urls = ['https://example.com/ekonomi/20200114/', 'https://example.com/ekonomi/20200113/', 'https://example.com/ekonomi/20200112/', 'https://example.com/ekonomi/20200111/']

titles = []
for page_url in urls:
    uClient = uReq(page_url)

    page_soup = soup(uClient.read(), "html.parser")
    uClient.close()

    # finds each product from the store page
    containers = page_soup.findAll("div", {"class": "b-plainlist__info"})

    for container in containers:
        titles.append(container.h2.get_text())

df = pd.DataFrame(titles, columns=['title'])
df.to_csv("output.csv", index=False)
...