我正在尝试抓取主题标签中的帖子数量,它可以与以下代码完美配合:
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)
已编辑:
我得到的错误如下:追溯(最近一次呼叫过去):
文件“ C:/用户/用户/桌面/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编码问题有关?
答案 0 :(得分: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)
答案 1 :(得分:1)
每当使用硒来抓取数据时,在大多数情况下都考虑添加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)