Попытка извлечь ссылки из извлечения ссылки из csv-файла в request.get, но получение объекта «TypeError: NoneType» не может быть подписан » - PullRequest
0 голосов
/ 28 февраля 2019

код:

from bs4 import BeautifulSoup

import requests

import csv

import pandas as pd

links = pd.read_csv('C:\\Users\\acer\\Desktop\\hindustan_pages.csv',encoding = 'latin',dtype=str)

for i in range(1,3):

      link = links.iloc[i,0]

      r = requests.get(link)

      soup = BeautifulSoup(r.text,'lxml')

      div = soup.find('div',{"id":"company_list_grid"})
      for links in div.find_all('th',{"id":"c_name"}):
          link = links.find('a')
          print("https://www.hindustanyellowpages.in/Ahmedabad" + link['href'][2:])

при получении ошибки:

Трассировка (последний последний вызов):

Файл "C: \ Users \ acer \ AppData\ Local \ Programs \ Python \ Python37 \ hindustanyellowpages.py ", строка 8, в

link = links.iloc[i,0]

TypeError: объект 'NoneType' не является подписным

помогите мне, пожалуйста, отсортироватьиз этого.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Обнаружил проблему, но сначала:

1) Когда pandas читает в файле csv, предполагается, что у вас есть заголовок.Поэтому строка 1 в вашем csv фактически никогда не будет обработана, поскольку она сохраняется как имя столбца, поэтому вам нужно добавить параметр, чтобы сообщить пандам, что заголовков нет header=None.Также, как примечание, не уверен, понимаете ли вы это или нет, но индексы начинаются с 0. Таким образом, ваш код, как есть, фактически начинается со ссылки в строке 2 кадра данных.Если вы хотите, чтобы он начинался со строки 1, вам нужно range(0,2)

2) TypeError: 'NoneType' object is not subscriptable, потому что links, в котором хранится ваш кадр данных для повторения, перезаписывается на for links in div.find_all('th',{"id":"c_name"}):,Поэтому, когда он переходит ко 2-й строке вашего links фрейма данных, он больше не является фреймом данных, а скорее элементом в ваших тегах div.find_all('th',{"id":"c_name"}).Чтобы это исправить, мы просто переименуем ваш links фрейм данных в links_df:

from bs4 import BeautifulSoup
import requests
import csv
import pandas as pd

# Renamed to links_df and added header=None
links_df = pd.read_csv('C:\\Users\\acer\\Desktop\\hindustan_pages.csv',encoding = 'latin',dtype=str, header=None)

#for i, row in links_df.iterrows():  <---- if you want it to do the whole dataframe, you can simply use .iterrows instead of for i in range()
for i in range(1,3):
    link = links_df.iloc[i,0] #<--- refers to a row in your links_df
    r = requests.get(link)
    soup = BeautifulSoup(r.text,'lxml')

    div = soup.find('div',{"id":"company_list_grid"})
    for links in div.find_all('th',{"id":"c_name"}):
        link = links.find('a')
        print("https://www.hindustanyellowpages.in/Ahmedabad" + link['href'][2:])

Вывод:

https://www.hindustanyellowpages.in/Ahmedabad/Hetal-Mandap-Decorators/Satellite
https://www.hindustanyellowpages.in/Ahmedabad/Radhe-Krishna-Event-Management/Bapunagar
https://www.hindustanyellowpages.in/Ahmedabad/Amiraj-Decorators/Maninagar
https://www.hindustanyellowpages.in/Ahmedabad/Hiral-Handicraft/Saijpur-Bogha
https://www.hindustanyellowpages.in/Ahmedabad/S-D-Traders/Teen-Darwaja
https://www.hindustanyellowpages.in/Ahmedabad/Agro-Net-Plast/Kathwada
https://www.hindustanyellowpages.in/Ahmedabad/Shree-Krishna-Suppliers/Naroda
https://www.hindustanyellowpages.in/Ahmedabad/Bulakhidas-Vitthaldas/Panchkuva
https://www.hindustanyellowpages.in/Ahmedabad/Nagindas-AND-Sons-(Patva)/Relief-Road
https://www.hindustanyellowpages.in/Ahmedabad/New-Rahul-Electricals-OR-Dhruv-Light-Decoration-AND-Sound-System/Subhash-Bridge
https://www.hindustanyellowpages.in/Ahmedabad/Bhairavi-Craft/Thaltej
https://www.hindustanyellowpages.in/Ahmedabad/Saath-Sangath-Party-Plot/Rakanpur
https://www.hindustanyellowpages.in/Ahmedabad/Poonam-Light-Decoration-And-Electricals/Naroda
https://www.hindustanyellowpages.in/Ahmedabad/Muku-Enterprise/Isanpur
https://www.hindustanyellowpages.in/Ahmedabad/Malaviya-Decoration-Service/Nikol
https://www.hindustanyellowpages.in/Ahmedabad/Hariprabha-Enterprises/Paldi
https://www.hindustanyellowpages.in/Ahmedabad/Festo-Craft/Thaltej
https://www.hindustanyellowpages.in/Ahmedabad/Jay-Jognimata-Decoration/Kubernagar
https://www.hindustanyellowpages.in/Ahmedabad/Maruti-Decorators/Ranip
https://www.hindustanyellowpages.in/Ahmedabad/Krishna-Light-and-Decoration/Gandhi-Road
https://www.hindustanyellowpages.in/Ahmedabad/Shree-Ambika-Light-Decoration/Ghatlodiya
https://www.hindustanyellowpages.in/Ahmedabad/R-S-Power-House/Gandhi-Road
https://www.hindustanyellowpages.in/Ahmedabad/New-Amit-Stores/Paldi
https://www.hindustanyellowpages.in/Ahmedabad/Gayatri-Cetera-s-and-Decoration/Ranip
https://www.hindustanyellowpages.in/Ahmedabad/Poonam-lights-and-decoration/Navrangpura
https://www.hindustanyellowpages.in/Ahmedabad/Shree-Ambica-Engg-Works/Naroda
https://www.hindustanyellowpages.in/Ahmedabad/Vedant-Industries/Vatva-Gidc
https://www.hindustanyellowpages.in/Ahmedabad/Honest-Traders/Narol
https://www.hindustanyellowpages.in/Ahmedabad/Sai-Samarth-Industries/Nana-Chiloda
https://www.hindustanyellowpages.in/Ahmedabad/R-N-Industries/Odhav
https://www.hindustanyellowpages.in/Ahmedabad/Jay-Ambe-Enterprise/S-G-Road
https://www.hindustanyellowpages.in/Ahmedabad/Satyam-Enterprise/Narol
https://www.hindustanyellowpages.in/Ahmedabad/Maniar-And-Co/Rakhial
https://www.hindustanyellowpages.in/Ahmedabad/Shiv-Shakti-Plastic-Industries/Amraivadi
https://www.hindustanyellowpages.in/Ahmedabad/Dinesh-Engineering-Works/Kathwada
https://www.hindustanyellowpages.in/Ahmedabad/MARUTI-ENGINEERS-OR-MARUTI-SAND-BLASTING/Odhav
https://www.hindustanyellowpages.in/Ahmedabad/Cranetech-Equipments/Vatva
https://www.hindustanyellowpages.in/Ahmedabad/Suyog-Engineering-AND-Fabricators/Chhatral-GIDC
https://www.hindustanyellowpages.in/Ahmedabad/Sanghvii-Conveyors/Thaltej
https://www.hindustanyellowpages.in/Ahmedabad/Siddh-Kripa-Steel-Fab/Kathwada
https://www.hindustanyellowpages.in/Ahmedabad/Ashirvad-Industries/Vatva-Gidc
https://www.hindustanyellowpages.in/Ahmedabad/G-I-Lokhandwala/Chandola
https://www.hindustanyellowpages.in/Ahmedabad/M-P-Electrical-Engineering--OR--M-P-Crane/Naroda-Gidc
https://www.hindustanyellowpages.in/Ahmedabad/Krishna-Enterprise/Geeta-Mandir
https://www.hindustanyellowpages.in/Ahmedabad/Nmtg-Mechtrans-Techniques-Pvt-Ltd/Naroda-Gidc
https://www.hindustanyellowpages.in/Ahmedabad/Shree-Balaad-Handling-Works/Odhav
https://www.hindustanyellowpages.in/Ahmedabad/DLM-Enterprise/Vastral
https://www.hindustanyellowpages.in/Ahmedabad/Alfa-Engineers--OR--Everest-Sanitary/Amaraivadi
https://www.hindustanyellowpages.in/Ahmedabad/Parv-Engineering-Equipments/Vatva
https://www.hindustanyellowpages.in/Ahmedabad/Vikrant-Equipments/Kathwada

Дополнительно:

использование:

for i, row in links_df.head(10).iterrows():
    link = links_df.iloc[i,0] 

или

for i, row in links_df.iloc[:10].iterrows():
    link = links_df.iloc[i,0] 
0 голосов
/ 28 февраля 2019

Попробуйте это.

link = df.link.iloc[i]

Если я не ошибаюсь, ваш df - это ссылки, поэтому

link = links.link.iloc[i]

Дайте мне знать, если это поможет

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