【发布时间】:2017-12-29 07:29:40
【问题描述】:
我正在抓取 Twitter 网站。 (API 不用于检索历史数据。)。较小的范围会很快出现,但如果您制作较大的范围,您将不得不花费大量时间。
还有一个错误,就是连接时间长了就停止了。
所以我的问题是,有什么方法可以使用 Selenium 加快网页抓取速度?还是我需要修改我的代码?
#python3
import requests
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
browser = webdriver.PhantomJS('C:\phantomjs-2.1.1-windows/bin/phantomjs')
url =u'https://twitter.com/search?f=tweets&vertical=default&q=%EC%84%B8%EC%9B%94%ED%98%B8%20since%3A2014-04-16%20until%3A2014-04-17&src=typd&lang=ko'
browser.get(url)
time.sleep(1)
body = browser.find_element_by_tag_name('body')
for _ in range(10000):
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(0.1)
tweets=browser.find_elements_by_class_name('tweet-text')
wfile = open("140416.txt", mode='w', encoding='utf8')
data={}
i = 1
for i, tweet in enumerate(tweets):
data['text'] = tweet.text
print(i, ":", data)
wfile.write(str(data) +'\n')
i += 1
wfile.close()
【问题讨论】:
-
您的脚本正在休眠 100 毫秒 x 10000 次 = 1000 秒 = 总共约 17 分钟。因此,像这样修改您的代码:
# time.sleep(0.1)将使您的脚本快 17 分钟。 -
你也可以使用 BeautifulSoup 中的 .findAll 来抓取推文(你传入例如 driver.page_source)。 Bs4 不是光速,但在解析 html 时仍然比 selenium 快。
-
@jlaur 有了 BeautifulSoup,你不会只带 20 条推文吗?我要带几条推文,你知道如何使用 BeautifulSoup 导入多条推文吗?不介意的话可以教教我吗?
-
您仍然使用 selenium 来检索数据,但使用 bs4 解析它。 tweets=BeautifulSoup(browser.page_source, "html.parser").findAll(whatevertagyouneed)
-
顺便说一句 - 您是否尝试检查内容是否通过某种 ajax 调用加载?如果是这种情况,您可以改用它...
标签: python selenium twitter web-scraping web-crawler