我一直在尝试使用Selenium
做一个网页抓取。
我需要下载两个信息列表:名字和照片。
我用这个代码下载了名单:
### click on right div
browser.find_element("xpath","/html/body/div[1]/div/div/div[3]/div/div[2]/div[2]/div/div").click()
### colect names
nomes_ls_contatos = browser.find_elements(By.CLASS_NAME, "zoWT4")
len(nomes_ls_contatos) # 21
nomes_ls_contatos[1].text
为了下载图片,我尝试:
### collect pictures
fotos_ls_contatos = browser.find_elements(By.TAG_NAME, "img")
len(fotos_ls_contatos) # 24
print(fotos_ls_contatos[1].get_attribute("src"))
但这样一来,它下载了三张我不需要的照片。
我发现正确的图片在类_3GlyB
中。并尝试:
fotos_ls_contatos = browser.find_elements(By.CLASS_NAME, "_3GlyB")
len(fotos_ls_contatos) # 20
fotos_ls_contatos[1].text
但它返回一个空字符串。
那么,我该怎么做呢?
比如browser.find_elements(By.CLASS_NAME, "_3GlyB").find_elements(By.TAG_NAME, "img")
PS:R的话,这是有效的:
# collect names
nome_remetente <- lista_mensagens[[1]] |>
rvest::read_html() |>
rvest::html_elements("._3vPI2") |>
rvest::html_elements(".zoWT4") |>
rvest::html_element("span") |>
rvest::html_text() |>
as.data.frame() |>
dplyr::rename(nome = 1) |>
dplyr::filter(!is.na(nome))
# collect pictures
imagem_remetente <- lista_mensagens[[1]] |>
rvest::read_html() |>
rvest::html_elements("._1Oe6M") |>
rvest::html_elements("._2EU3r") |>
rvest::html_elements("._3GlyB") |>
rvest::html_elements("img") |>
rvest::html_attr("src") |>
as.data.frame() |>
dplyr::rename(imagem = 1)
1条答案
按热度按时间4jb9z9bj1#
好吧,在我做了之后:
这不是一个漂亮的办法,但解决了。