使用 Selenium Python 进行网页抓取 [Twitter + Instagram]

Posted

技术标签:

【中文标题】使用 Selenium Python 进行网页抓取 [Twitter + Instagram]【英文标题】:Web Scraping with Selenium Python [Twitter + Instagram] 【发布时间】:2017-08-19 09:23:56 【问题描述】:

我正在尝试根据地理位置对 Instagram 和 Twitter 进行网络抓取。 我可以运行查询搜索,但在将网页重新加载到更多并将字段存储到数据框时遇到了挑战。

我确实找到了几个没有 API 密钥的网页抓取 twitter 和 Instagram 的示例。但它们与#tags 关键字有关。

我正在尝试在地理位置和旧日期之间进行抓取。到目前为止,我已经在 python 3.X 和 anaconda 中所有最新版本的软件包中编写代码。

'''
    Instagram - Components
    "id": "1478232643287060472", 
     "dimensions": "height": 1080, "width": 1080, 
     "owner": "id": "351633262", 
     "thumbnail_src": "https://instagram.fdel1-1.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17439262_973184322815940_668652714938335232_n.jpg", 
     "is_video": false, 
     "code": "BSDvMHOgw_4", 
     "date": 1490439084, 
     "taken-at=213385402"
     "display_src": "https://instagram.fdel1-1.fna.fbcdn.net/t51.2885-15/e35/17439262_973184322815940_668652714938335232_n.jpg", 
     "caption": "Hakuna jambo zuri kama kumpa Mungu shukrani kwa kila jambo.. \ud83d\ude4f\ud83c\udffe\nIts weekend\n#lifeistooshorttobeunhappy\n#Godisgood \n#happysoul \ud83d\ude00", 
     "comments": "count": 42, 
     "likes": "count": 3813, 
'''


import selenium
from selenium import webdriver
#from selenium import selenium
from bs4 import BeautifulSoup
import pandas

#geotags = pd.read_csv("geocodes.csv")
#parmalink = 
query = geocode%3A35.68501%2C139.7514%2C30km%20since:2016-03-01%20until:2016-03-02&f=tweets

twitterURL = 'https://twitter.com/search?q=' + query
#instaURL = "https://www.instagram.com/explore/locations/213385402/"


browser = webdriver.Firefox()
browser.get(twitterURL)
content = browser.page_source

soup = BeautifulSoup(content)
print (soup)

对于 Twitter 搜索查询,我收到语法错误

对于 Instagram,我没有收到任何错误,但我无法重新加载更多帖子并写回 csv 数据框。

我也在尝试在 Twitter 和 Instagram 中使用纬度和经度搜索。

我有一个 csv 中的地理坐标列表,我可以使用该输入或编写查询进行搜索。

将不胜感激任何完成位置抓取的方法。

感谢帮助!

【问题讨论】:

您是否考虑过使用requests 代替硒?我对 twitter 进行了查询,它有效。此外,您的代码应该将查询作为字符串接收,query = geocode%3... 行应该会给您一个错误。 @Fernando 你能帮我解答一下吗。我对这个网络抓取完全陌生,而且最近远离编程。真的,我对什么和如何继续感到更加困惑。 . 【参考方案1】:

我设法使用requests 使它工作。您的代码将如下所示:

from bs4 import BeautifulSoup
import requests

query = "geocode%3A35.68501%2C139.7514%2C30km%20since:2016-03-01%20until:2016-03-02&f=tweets"

twitter = 'https://twitter.com/search?q=' + query

content = requests.get(twitter)
soup = BeautifulSoup(content.text)

print(soup)

然后您可以使用soup 对象来解析您需要的内容。如果您的查询是正确的,同样的事情也适用于 Instagram。

【讨论】:

非常感谢您的回答..将汤解析为数据框是我面临的困难之一.. 也许你应该花点时间阅读pandas documentation 以更好地了解它是如何工作的 是的,甚至在发布问题之前就一直在尝试.. 没有得到任何结果,因此发布了一个问题.. 在我编写的代码中,Instagram 的搜索链接有一个基于 Facebook 位置编号格式的位置编号,我无法找到其他位置编号的列表。你能帮我形成基于纬度和经度的查询吗? :) 感谢您的回答。如果我能得到更多帮助,那就太好了。

以上是关于使用 Selenium Python 进行网页抓取 [Twitter + Instagram]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Selenium 和 Python 进行用户输入的网页抓取动态网站

从零开始学Python-使用Selenium抓取动态网页数据

用于网页抓取的 Selenium 与 BeautifulSoup

python爬虫-27-python之Selenium入门,动态网页抓取

请教网页里的特定数据怎么抓取?

使用 selenium 和 bs4 进行网页抓取