【问题标题】:Problem in scraping data in non-english character sites [Python]在非英文字符网站中抓取数据的问题 [Python]
【发布时间】:2019-06-01 14:43:37
【问题描述】:

我正在尝试抓取主题标签中的帖子数量,它与以下代码完美搭配:

from selenium import webdriver
import bs4 as bs
import pandas as pd
import datetime

driver = webdriver.Chrome()
driver.get('https://www.instagram.com/explore/tags/hkig')
source = driver.execute_script("return document.body.innerHTML")
soup = bs.BeautifulSoup(source,'lxml')

post = soup.find('span', class_='g47SY ').text
print(post)

但是,如果我将标签更改为非英文字符,它会崩溃,是什么原因以及如何解决?

以下脚本会报错:

from selenium import webdriver
import bs4 as bs
import pandas as pd
import datetime    

driver = webdriver.Chrome()
driver.get('https://www.instagram.com/explore/tags/モデル')
source = driver.execute_script("return document.body.innerHTML")
soup = bs.BeautifulSoup(source,'lxml')

post = soup.find('span', class_='g47SY ').text
print(post)

已编辑:

我得到的错误如下: Traceback(最近一次调用最后一次):

文件“C:/Users/user/Desktop/temp.py”,第 12 行,在 post = soup.find('span', class_='g47SY ').text AttributeError: 'NoneType' 对象没有属性 'text'

beautifulsoup 似乎在'span', class_='g47SY ' 中找不到任何东西,所以它给出了这样的错误,所以回到我的问题,为什么它找不到它?我检查了帖子元素的数量,表明它仍然是<span class="g47SY ">6,262,389</span>,可能是关于 utf-8 ascii 编码问题?

【问题讨论】:

  • 能否将您收到的错误信息告诉我们
  • 属性错误,因为我相信汤根本找不到任何元素.. :-(

标签: python selenium web-scraping beautifulsoup


【解决方案1】:

每当使用 selenium 抓取数据时,请考虑添加sleep,在大多数情况下,加载页面需要时间,因此页面的整个源代码不会被赶上。参考下面的可行代码

from selenium import webdriver
import bs4 as bs
import pandas as pd
import datetime
import time        #note this line

driver = webdriver.Chrome()
driver.get('https://www.instagram.com/explore/tags/モデル')
time.sleep(8)                                          #note this as well moreover it should be after get method 
source = driver.execute_script("return document.body.innerHTML")
soup = bs.BeautifulSoup(source,'lxml')
print(soup)

post = soup.find('span', class_='g47SY ').text
print(post)

【讨论】:

    【解决方案2】:

    你需要等待使用WebDriverWait,直到找到类名为g47SY的元素,如果使用Selenium,最好不要使用BeautifulSoup。

    driver.get('https://www.instagram.com/explore/tags/モデル')
    post = WebDriverWait(driver, 10).until(
        lambda driver: driver.find_element_by_class_name('g47SY')
    )
    print(post.text)
    

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 2011-09-30
      • 2014-01-24
      • 2018-10-04
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多