我正在开展网络抓取项目.我正在使用的其中一个网站的数据来自Javascript.
我之前的一个问题有一个建议,我可以直接从Python调用Javascript,但我不知道如何实现这一点.
例如:如果JavaScript函数定义为: add_2(var,var2)
我如何从Python调用该JavaScript函数?
我想在服务器端执行以下操作:
1)刮取网页
2)模拟该页面上的点击,然后导航到新页面.
3)刮掉新页面
4)模拟新页面上的一些按钮点击
5)通过json或其他东西将数据发送回客户端
我正在考虑将它与Node.js一起使用.
但我很困惑我应该使用哪个模块
a)Zombie
b)Node.io
c)Phantomjs
d)JSDOM
e)其他
我已经安装了node,io但是无法通过命令提示符运行它.
PS:我在Windows 2008服务器上工作
这是抓取时获取网页的最佳方式吗?
HttpWebRequest oReq = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse resp = (HttpWebResponse)oReq.GetResponse();
var doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(resp.GetResponseStream());
var element = doc.GetElementbyId("//start-left");
var element2 = doc.DocumentNode.SelectSingleNode("//body");
string html = doc.DocumentNode.OuterHtml;
Run Code Online (Sandbox Code Playgroud)
我已经看到HtmlWeb().Load了一个网页.这是一个更好的替代加载和刮网页?
好的,我会试试.
HtmlDocument doc = web.Load(url);
Run Code Online (Sandbox Code Playgroud)
现在,当我得到我的doc,并没有得到如此mutch属性.没有人喜欢SelectSingleNode.我唯一可以使用的是GetElementById,但这有效但我想上课.
我需要这样做吗?
var htmlBody = doc.DocumentNode.SelectSingleNode("//body");
htmlBody.SelectSingleNode("//paging");
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过Selenium做一些webscraping.我的问题很简单:你如何找到一个链接然后如何点击它?例如:以下是我尝试网络抓取的HTML:
<td bgcolor="#E7EFF9">
<a href="javascript:selectDodasaDetdasdasy(220011643,'Kdasdas?');" target="_self">
Details
</a>
</td>
Run Code Online (Sandbox Code Playgroud)
所以,你可以看到"细节"这个词是一个链接.
如何使用Selenium找到该链接并单击它?
python web-scraping python-2.7 python-3.x selenium-webdriver
我正在尝试使用python和美丽的汤来提取下面标签的内容部分:
<meta property="og:title" content="Super Fun Event 1" />
<meta property="og:url" content="http://superfunevents.com/events/super-fun-event-1/" />
Run Code Online (Sandbox Code Playgroud)
我正在使用BeautifulSoup来加载页面并找到其他东西(这也从源代码中隐藏的id标签中获取文章id),但我不知道正确的方法来搜索html并找到这些位,我尝试过find和findAll的变种无济于事.代码迭代目前的网址列表...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#importing the libraries
from urllib import urlopen
from bs4 import BeautifulSoup
def get_data(page_no):
webpage = urlopen('http://superfunevents.com/?p=' + str(i)).read()
soup = BeautifulSoup(webpage, "lxml")
for tag in soup.find_all("article") :
id = tag.get('id')
print id
# the hard part that doesn't work - I know this example is well off the mark!
title = soup.find("og:title", "content")
print (title.get_text())
url = soup.find("og:url", "content")
print …Run Code Online (Sandbox Code Playgroud) 我需要一个强大的Web scraper库来从web挖掘内容.可以支付或免费两者对我来说都没问题.请建议我使用库或更好的方法来挖掘数据并存储在我的首选数据库中.我搜索过,但我没有找到任何好的解决方案.我需要专家的好建议.请帮帮我.
我有以下html(标记为\n的换行符):
...
<tr>
<td class="pos">\n
"Some text:"\n
<br>\n
<strong>some value</strong>\n
</td>
</tr>
<tr>
<td class="pos">\n
"Fixed text:"\n
<br>\n
<strong>text I am looking for</strong>\n
</td>
</tr>
<tr>
<td class="pos">\n
"Some other text:"\n
<br>\n
<strong>some other value</strong>\n
</td>
</tr>
...
Run Code Online (Sandbox Code Playgroud)
如何找到我要找的文字?下面的代码返回第一个找到的值,所以我需要以某种方式过滤固定文本.
result = soup.find('td', {'class' :'pos'}).find('strong').text
Run Code Online (Sandbox Code Playgroud)
更新.如果我使用以下代码:
title = soup.find('td', text = re.compile(ur'Fixed text:(.*)', re.DOTALL), attrs = {'class': 'pos'})
self.response.out.write(str(title.string).decode('utf8'))
Run Code Online (Sandbox Code Playgroud)
然后它返回固定文本:.
我试图使用python中的selenium用javascript抓取一些动态页面.但是,在我按照pypi页面上的selenium指令(http://pypi.python.org/pypi/selenium)后,我无法调用firefox.我在AWS ubuntu 12.04上安装了firefox.我得到的错误信息是:
In [1]: from selenium import webdriver
In [2]: br = webdriver.Firefox()
---------------------------------------------------------------------------
WebDriverException Traceback (most recent call last)
/home/ubuntu/<ipython-input-2-d6a5d754ea44> in <module>()
----> 1 br = webdriver.Firefox()
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.pyc in __init__(self, firefox_profile, firefox_binary, timeout)
49 RemoteWebDriver.__init__(self,
50 command_executor=ExtensionConnection("127.0.0.1", self.profile,
---> 51 self.binary, timeout),
52 desired_capabilities=DesiredCapabilities.FIREFOX)
53
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.pyc in __init__(self, host, firefox_profile, firefox_binary, timeout)
45 self.profile.add_extension()
46
---> 47 self.binary.launch_browser(self.profile)
48 _URL = "http://%s:%d/hub" % (HOST, PORT)
49 RemoteConnection.__init__(
/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.pyc in launch_browser(self, profile)
42
43 self._start_from_profile_path(self.profile.path)
---> 44 self._wait_until_connectable()
45 …Run Code Online (Sandbox Code Playgroud) python selenium screen-scraping amazon-web-services web-scraping
我花了一天时间研究一个可以用来完成以下工作的库:
这是我没有成功的尝试:
我真的希望HtmlUnit工作,因为它似乎最适合我的解决方案.是否有任何方式或至少另一个我错过的图书馆适合我的需求?
我目前正在使用Android Studio 0.1.7,如果需要可以移动到Ellipse.
提前致谢!
我正在开发一个需要来自其他网站的某些统计数据的项目,并且我已经创建了一个HTML scraper,可以每15分钟自动获取一次这些数据.但是,我现在停止了机器人,就像他们的使用条款一样,他们提到他们不允许它.
我真的很想尊重这一点,特别是如果有法律禁止我接受这些数据,但我已经多次通过电子邮件与他们联系而没有一个答案,所以现在我得出的结论是,我只是简单地说抓住数据,如果它是合法的.
在某些论坛上,我已经读到它是合法的,但我更愿意在StackOverflow上获得更"精确"的答案.
让我们说这实际上并不违法,他们是否有任何软件可以发现我的机器人每隔15分钟建立几个连接?
此外,在谈论获取他们的数据时,我们正在讨论每个"团队"的单个号码,而这个号码我将转移到我们自己的号码.
web-scraping ×10
python ×5
c# ×2
html ×2
selenium ×2
.net ×1
android ×1
htmlunit ×1
java ×1
javascript ×1
jsdom ×1
node.js ×1
phantomjs ×1
python-2.7 ×1
python-3.x ×1
web-crawler ×1
zombie.js ×1