Как очистить данные с сайта, когда отображается ложный ответ - PullRequest
0 голосов
/ 17 марта 2020

Я хочу очистить данные с сайта, но получаю одну ошибку. Поскольку я новичок в изучении веб-страниц, прошу рассказать, как решить эту проблему. вот проблема, с которой я сталкиваюсь UnboundLocalError: локальная переменная «суп», на которую ссылаются перед присваиванием

, вот мой код:

import requests
from bs4 import BeautifulSoup
import csv

def get_page(url):
    response = requests.get(url)
    if not response.ok:
        print('server responded:', response.status_code)
    else:
        soup = BeautifulSoup(response.text, 'html.parser') # 1. html , 2. parser
    return soup
def get_detail_page(soup):
     try:
        title = (soup.find('h1',class_="ProductTitle-title",id=False).text)
     except:
         title = 'Empty Title'
     try:
        title = (soup.find('h1',class_="TopBar-perUnit TopBar-perUnitTop",id=False).text)
     except:
         price = 'Empty price'   
     try:
        img = (soup.find('img',class_="ViewSelectorItem-image",id=False).get('src'))
     except:
        img = 'Empty img'
     data = {
         'Title'        : title,
         'Price'        : price,
         'Img'          : img
     }
     print(data)
def main():
    url = "https://www.zazzle.com/60th_silver_diamond_anniversary_photo_invitations-161837951427094549"
    get_detail_page(get_page(url))
if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 18 марта 2020

Я добавил user-agent в ваш код:

import urllib.request as urllib2
from bs4 import BeautifulSoup
import csv


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

def get_page(url):
    req = urllib2.Request(url, headers=REQUEST_HEADER)
    page = urllib2.urlopen(req, timeout=20).read()

    soup = BeautifulSoup(page, "html.parser")
    return soup


def get_detail_page(soup):
    try:
       title = (soup.find('h1',class_="ProductTitle-title",id=False).text)
    except:
        title = 'Empty Title'
    try:
       title = (soup.find('h1',class_="TopBar-perUnit TopBar-perUnitTop",id=False).text)
    except:
        price = 'Empty price'   
    try:
       img = (soup.find('img',class_="ViewSelectorItem-image",id=False).get('src'))
    except:
       img = 'Empty img'
    data = {
        'Title'        : title,
        'Price'        : price,
        'Img'          : img
    }
    print(data)


def main():
    url = "https://www.zazzle.com/60th_silver_diamond_anniversary_photo_invitations-161837951427094549"
    get_detail_page(get_page(url))


if __name__ == '__main__':
    main()

Кроме того, довольно интересное чтение: Google Chrome: измените строку User-Agent

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