【问题标题】:Scraping content from page encountering None type return从遇到无类型返回的页面中抓取内容
【发布时间】:2017-05-15 03:19:16
【问题描述】:

我正在从 http://www.sfma.org.sg/member/info/a-linkz-marketing-pte-ltd 等网站抓取公司资料信息

我想要从公司名称到网站的内容,然后是类别内容。我写了一些代码,但它返回 None 类型错误。

谁能帮忙看看代码,看看哪里出了问题?非常感谢。

import sys
import csv
import urllib
import requests
from bs4 import BeautifulSoup
import time
import datetime
from random import randint 
import numpy as np
import pandas as pd


fi = open('Input_List.csv', 'r')
#readers = list(csv.reader(fi))
readers=csv.reader(fi)
#print(readers)
df = []

for reader in readers:
    #print(str(reader)[1:-1]+"\n")
    url=str(reader)[2:-2]
    request = requests.session()
    htmlpage = requests.get(url)
    #print("status code: "+ str(htmlpage.status_code))
    if htmlpage.status_code != 200 : 
        break    # something went wrong #  
    soup = BeautifulSoup(htmlpage.text,'lxml')
    for result_table in soup.**findall**("div", {"class": "w3-container"}):
        #content=result_table.find('p')
        #print(result_table)
        content=result_table.text

        if(content.find("Website") > -1):
            index=content.find("Website")
            content=content[:content.find("\n",index)]
            #print(content)
            df=np.append(df,content)
            break
        #print(content)
        df=np.append(df,str(content))
        #print(df)
df1 = pd.DataFrame(df)
df1.to_csv("SFMA.csv",index=False,encoding='utf-8')
        # #df.savetxt("SFMA.csv", index=False,encoding='utf-8')
# #df.save("SFMA.csv")
fi.close()

【问题讨论】:

    标签: html python-3.x beautifulsoup web-crawler


    【解决方案1】:

    你打错了。 soup.findall("div", {"class": "w3-container"}): 应该是 soup.find_all("div", {"class": "w3-container"}):

    BeautifulSoup 中没有findall 方法,因此它不起作用并返回None

    要获取从公司名称到网站的数据,您可以这样做。

    for result_table in soup.find_all("div", {"class": "w3-container"}):
    
        content=result_table.text
        index=content.find("Website")
    
        if(index > -1):
    
            content=content[:content.find("\n",index)]
            print(content)
            break
    

    【讨论】:

    • 谢谢!我打错字了。顺便说一下,你能解释一下 index=content.find("Website") if(index > -1):
    • @Sun contentstring。它正在查找单词Website 的索引。如果没有这样的词,则返回-1
    • @ MD。 Khairul Basar 很抱歉再次打扰,我正在尝试通过 Pandas 将结果保存在 csv 中,但结果文件为空,显示为“0”。代码已更新。
    • @Sun 代码不应以这种方式更改。现在这是一个全新的问题。如果您对 pandas 有疑问,请发布一个新问题。
    • Basar,是的,谢谢你的提醒,回到已经找到代码中的所有错字
    猜你喜欢
    • 2021-11-25
    • 2020-04-24
    • 1970-01-01
    • 2021-07-06
    • 2023-03-24
    • 2020-02-17
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多