Сохраняйте согласованность при вводе / выводе в Python соскребая URL из файла CSV - PullRequest
0 голосов
/ 16 мая 2018

Мне нужна ваша помощь по этому вопросу:

У меня есть рабочий скрипт на Python:

from bs4 import BeautifulSoup
import requests
import csv

with open('urls.csv', 'r') as csvFile, open('results.csv', 'w', newline='') as results:
    reader = csv.reader(csvFile, delimiter=';')
    writer = csv.writer(results)

    for row in reader:
        # get the url
        url = row[0]

        # fetch content from server
        html = requests.get(url).content

        # soup fetched content
        soup = BeautifulSoup(html, 'html.parser')

        divTag = soup.find("div", {"class": "productsPicture"})

        if divTag:
            tags = divTag.findAll("a")
        else:
            continue

        for tag in tags:
            res = tag.get('href')
            if res != None:
                writer.writerow([res])

Источник: https://stackoverflow.com/a/50328564/6653461

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

enter image description here

Идея, стоящая за всем этим, заключается в том, чтобы получить / напечатать перенаправленную ссылку, если рабочая ссылка - распечатать ссылку, если нет, распечатать ошибка ссылки или около того

пример urls.csv

https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E705Y-0193; - valid
https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E703Y-0193; - non valid
https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E702Y-4589; - valid
https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E706Y-9093; - non valid

1 Ответ

0 голосов
/ 16 мая 2018

Вам просто нужно добавить еще несколько элементов в список, который вы пишете, с помощью функции csv.writerow():

from bs4 import BeautifulSoup
import requests
import csv

with open('urls.csv', 'r') as csvFile, open('results.csv', 'w', newline='') as results:
    reader = csv.reader(csvFile)
    writer = csv.writer(results)

    for row in reader:
        # get the url

        for url in row:
            url = url.strip()

            # Skip any empty URLs
            if len(url):
                print(url)

                # fetch content from server

                try:
                    html = requests.get(url).content
                except requests.exceptions.ConnectionError as e:
                    writer.writerow([url, '', 'bad url'])
                    continue
                except requests.exceptions.MissingSchema as e:
                    writer.writerow([url, '', 'missing http...'])
                    continue

                # soup fetched content
                soup = BeautifulSoup(html, 'html.parser')

                divTag = soup.find("div", {"class": "productsPicture"})

                if divTag:
                    # Return all 'a' tags that contain an href
                    for a in divTag.find_all("a", href=True):
                        url_sub = a['href']

                        # Test that link is valid
                        try:
                            r = requests.get(url_sub)
                            writer.writerow([url, url_sub, 'ok'])
                        except requests.exceptions.ConnectionError as e:
                            writer.writerow([url, url_sub, 'bad link'])
                else:
                    writer.writerow([url, '', 'no results'])

Давая вам:

https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E705Y-0193,https://www.tennis-point.com/asics-gel-game-6-all-court-shoe-men-white-silver-02013802643000.html,ok
https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E703Y-0193,https://www.tennis-point.com/asics-gel-game-6-all-court-shoe-men-white-silver-02013802643000.html,no results
https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E702Y-4589,https://www.tennis-point.com/asics-gel-resolution-7-clay-court-shoe-men-blue-lime-02014202831000.html,ok
https://www.tennis-point.com/index.php?stoken=737F2976&lang=1&cl=search&searchparam=E706Y-9093,https://www.tennis-point.com/asics-gel-resolution-7-clay-court-shoe-men-blue-lime-02014202831000.html,no results

Обработка исключений может пойматьслучай, когда URL из файла CSV является недействительным.Вы также можете проверить, что URL, возвращенный по ссылке на странице, действителен.Третий столбец может дать вам статус, то есть ok, bad url, no results или bad link.

Предполагается, что все столбцы в вашем CSV-файле содержат URL-адреса, которые необходимо проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...