Объект 'list' не имеет атрибута 'timeout' и печатает только первый элемент в таблице - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь вытащить таблицу из списка URL. Когда я ввожу только один URL-адрес, он распечатывает только первые элементы таблицы, а когда я добавляю дополнительные URL-адреса в список, я получаю сообщение об ошибке «объект list» не имеет атрибута «timeout». Каков наилучший способ получить остальные элементы и добавить дополнительные URL-адреса? Ниже приведен код, который я запускаю.

import time, random, csv, bs4, requests, io
import pandas as pd
timeDelay = random.randrange(5, 20)
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_urls = [
"https://www.lonza.com/products-services/bio-research/electrophoresis-of-nucleic-acids-and-proteins/nucleic-acid-electrophoresis/precast-gels-for-dna-and-rna-analysis/truband-gel-anchors.aspx",
"https://www.lonza.com/products-services/bio-research/transfection/nucleofector-kits-for-primary-cells/nucleofector-kits-for-primary-epithelial-cells/nucleofector-kits-for-human-mammary-epithelial-cells-hmec.aspx",
"https://www.lonza.com/products-services/bio-research/transfection/nucleofector-kits-for-primary-cells/nucleofector-kits-for-primary-neural-cells/nucleofector-kits-for-mammalian-glial-cells.aspx",
]
uClient = uReq(my_urls)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")

containers = page_soup.findAll('tbody')


product_name_list =[]
cat_no_list = []
size_list = []
price_list =[]

for container in containers:
    if (len(container) > 0):
    #try:
        title_container = container.findAll('td')
        Product_name = title_container[0].text.strip()
        product_name_list.append(Product_name)

        CatNo_container = container.findAll('td')
        CatNo = CatNo_container[1].text.strip()
        cat_no_list.append(CatNo)

        #Size_container = container.findAll('div',{'class':'col-xs-2 noPadding'})
        #Size = Size_container[0].text.strip()
        #size_list.append(Size)

        Price_container = container.findAll('td')
        Price = Price_container[4].text.strip()
        price_list.append(Price)

        print('Product_name: '+ Product_name)
        print('CatNo: ' + CatNo)
        print('Size: ' + 'N/A')
        print('Price: ' + Price)
        print(" ")
        time.sleep(timeDelay)

1 Ответ

0 голосов
/ 29 июня 2018

Вы передаете список здесь, uClient = uReq(my_urls) как my_urls, где требуется строка.
Вам нужно передать отдельный элемент списка, то есть строки.

Вот отредактированный код, который работает для нескольких URL.

ОБНОВЛЕННЫЙ КОД (чтобы получить все предметы):

import time, random, csv, bs4, requests, io
import pandas as pd
timeDelay = random.randrange(5, 20)
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_urls = [
"https://www.lonza.com/products-services/bio-research/electrophoresis-of-nucleic-acids-and-proteins/nucleic-acid-electrophoresis/precast-gels-for-dna-and-rna-analysis/truband-gel-anchors.aspx",
"https://www.lonza.com/products-services/bio-research/transfection/nucleofector-kits-for-primary-cells/nucleofector-kits-for-primary-epithelial-cells/nucleofector-kits-for-human-mammary-epithelial-cells-hmec.aspx",
"https://www.lonza.com/products-services/bio-research/transfection/nucleofector-kits-for-primary-cells/nucleofector-kits-for-primary-neural-cells/nucleofector-kits-for-mammalian-glial-cells.aspx",
]

for url in my_urls:
    print("URL using: ", url)
    uClient = uReq(url)
    page_html = uClient.read()
    uClient.close()
    page_soup = soup(page_html, "html.parser")

    containers = page_soup.findAll('tbody')


    product_name_list =[]
    cat_no_list = []
    size_list = []
    price_list =[]

    for container in containers:
        if (len(container) > 0):
        #try:
            items = container.findAll('tr')
            for item in items:
                item = item.text.split('\n')

                Product_name = item[1]
                product_name_list.append(Product_name)

                CatNo = item[2]
                cat_no_list.append(CatNo)

                #Size_container = container.findAll('div',{'class':'col-xs-2 noPadding'})
                #Size = Size_container[0].text.strip()
                #size_list.append(Size)

                Price = item[6]
                price_list.append(Price)

                print('Product_name: '+ Product_name)
                print('CatNo: ' + CatNo)
                print('Size: ' + 'N/A')
                print('Price: ' + Price)
                print(" ")
            time.sleep(timeDelay)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...