使用 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