我是html抓取世界的新手,我很难在特定标题下拉入段落,在R中使用rvest
我想从多个站点中获取信息,这些站点都具有相对类似的设置.它们都有相同的标题,但标题下的段落数量可能会发生变化.我能够使用以下代码在标题下刮取特定段落:
unitCode <- data.frame(unit = c('SLE010', 'SLE115', 'MAA103'))
html <- sapply(unitCode, function(x) paste("http://www.deakin.edu.au/current-students/courses/unit.php?unit=",
x,
"&return_to=%2Fcurrent-students%2Fcourses%2Fcourse.php%3Fcourse%3DS323%26version%3D3",
sep = ''))
assessment <- html[3] %>%
html() %>%
html_nodes(xpath='//*[@id="main"]/div/div/p[3]') %>%
html_text()
Run Code Online (Sandbox Code Playgroud)
'xpath'元素引入评估标题下的第一段.有些页面在评估标题下有多个段落,如果我改变'xpath'变量来具体指定它们,我可以获得,例如p [4]或p [5].不幸的是,我想在数百页上迭代这个过程,所以每次更改xpath是不合适的,我甚至不知道每个页面中会有多少段落.
我认为,考虑到页面设置的不确定性,在我感兴趣的标题之后拉出所有<p>是最好的选择.
我想知道是否有办法在<h3>评估<h3>之后使用rvest或其他一些R刮包来刮掉所有<p>?
这是我试图抓取的HTML:
<span class="meta-attributes__attr-tags">
<a href="/tags/cinematic" title="cinematic">cinematic</a>,
<a href="/tags/dissolve" title="dissolve">dissolve</a>,
<a href="/tags/epic" title="epic">epic</a>,
<a href="/tags/fly" title="fly">fly</a>,
</span>
Run Code Online (Sandbox Code Playgroud)
我想得到每个href的锚文本:电影,溶解,史诗等.
这是我的代码:
url = urllib2.urlopen("http: example.com")
content = url.read()
soup = BeautifulSoup(content)
links = soup.find_all("span", {"class": "meta-attributes__attr-tags"})
for link in links:
print link.find_all('a')['href']
Run Code Online (Sandbox Code Playgroud)
如果我用"link.find_all"来做,我得到错误:TypeError:List索引必须是整数,而不是str.
但是,如果我打印link.find('a')['href']我只得到第一个.
我怎样才能得到所有这些?
我正在尝试使用PHP Simple HTML DOM Parser选择一个类或一个id,绝对没有运气.我的例子非常简单,似乎符合手册中给出的例子(http://simplehtmldom.sourceforge.net/manual.htm),但它不会起作用,它正在推动我的问题.使用简单dom给出的其他示例脚本工作正常.
<?php
include_once('simple_html_dom.php');
$html = str_get_html('<html><body><div id="foo">Hello</div><div class="bar">Goodbye</div></body></html>');
$ret = $html->find('.bar')->plaintext;
echo $ret;
print_r($ret);
Run Code Online (Sandbox Code Playgroud)
谁能看到我哪里出错了?
我不太熟悉python,必须编写一个脚本来执行一系列功能.基本上我仍然需要的模块是如何检查网站代码以匹配事先提供的链接.
所以我对网络抓取相当新.这个站点上有一个表,表的值由Javascript控制.这些值将确定我的浏览器被告知从Javascript请求的未来值的地址.这些新页面具有JSON响应,脚本在我的浏览器中更新表.
所以我想用一个机制化方法构建一个类,该方法接收一个url并吐出body响应,然后第一次HTML,然后,身体响应将是JSON,用于剩余的迭代.
我有一些有用的东西,但我想知道我做得对,还是有更好的方法.
class urlMaintain2:
def __init__(self):
self.first_append = 0
self.response = ''
def pageResponse(self,url):
import mechanize
import cookielib
br = mechanize.Browser()
#Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
#Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(False)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16'),
('Accept-Encoding','gzip')]
if self.first_append == 1:
br.addheaders.append(['Accept', ' application/json, text/javascript, */*'])
br.addheaders.append(['Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'])
br.addheaders.append(['X-Requested-With', 'XMLHttpRequest'])
br.addheaders.append(['User-agent','Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16'])
br.addheaders.append(['If-Modified-Since', 'Thu, 1 Jan 1970 00:00:00 …
Run Code Online (Sandbox Code Playgroud) 我有以下图像html,我试图解析在alt中的信息.目前我能够成功提取图像.
html(我目前解析的内容
<img class="rslp-p" alt="Sony Cyber-shot DSC-W570 16.1 MP Digital Camera - Silver" src="http://i.ebayimg.com/00/$(KGrHqZ,!j!E5dyh0jTpBO(3yE7Wg!~~_26.JPG?set_id=89040003C1" itemprop="image" />
Run Code Online (Sandbox Code Playgroud)
我从我解析的内容构造图像名称:
现行守则
def main(url, output_folder="~/images"):
"""Download the images at url"""
soup = bs(urlopen(url))
parsed = list(urlparse.urlparse(url))
count = 0
for image in soup.findAll("img"):
print image
count += 1
print count
print "Image: %(src)s" % image
image_url = urlparse.urljoin(url, image['src'])
filename = image["src"].split("/")[-1].split("?")[0].replace("$",'').replace(".JPG",".jpg").replace("~~_26",str(count)).lstrip("(")
parsed[2] = image["src"]
outpath = os.path.join(output_folder, filename)
urlretrieve(image_url, outpath)
Run Code Online (Sandbox Code Playgroud)
我想做的是提取是
alt="Sony Cyber-shot DSC-W570 16.1 MP Digital Camera - Silver"
Run Code Online (Sandbox Code Playgroud)
我也想在提取图像时使用alt数据作为文件名.
假设我有一批糖果.货物有许多盒子,每个盒子都有许多独特的糖果类型.每个盒子都有一个独特的id,与其他盒子不同; 糖果类型也是如此.此外,糖果还具有其他特性,如颜色,味道和数量.
采用以下HTML示例:
<div class="shipment">
<div class="box" data-boxid="a">
<div class="candy" data-candyid="1" data-color="orange" data-flavor="orange" data-qty="7">
<!-- unimportant content -->
</div>
<div class="candy" data-candyid="2" data-color="red" data-flavor="strawberry" data-qty="4">
<!-- unimportant content -->
</div>
</div>
<div class="box" data-boxid="b">
<div class="candy" data-candyid="3" data-color="green" data-flavor="lime">
<!-- unimportant content -->
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我已经看到了使用jQuery .map()
函数进行表解析的类似示例,我也看到过提及.each()
,但我一直无法生成任何正常工作的代码.
我想生成(使用jQuery)类似于以下内容的JSON对象:
{
"shipment": {
"a": {
"1": {
"color": "orange",
"flavor": "orange",
"qty": "7"
},
"2": {
"color": "red",
"flavor": "strawberry",
"qty": "4" …
Run Code Online (Sandbox Code Playgroud) 我想抓取这样的表格http://www.oddsportal.com//hockey/usa/nhl/carolina-hurricanes-ottawa-senators-80YZhBGC/ 我想抓取博彩公司和赔率。问题是我不知道那是什么类型的桌子,也不知道如何刮掉它。
这些线程可能能够帮助我(使用 R 抓取 javascript或这是什么类型的 HTML 表以及您可以使用什么类型的网页抓取技术?),但如果有人能给我指出正确的方向或更好的方向,我将不胜感激说明请参见此处。
那么赔率表是一个什么样的表,是否可以用 R 来抓取它?如果可以,如何抓取?
编辑:我应该更清楚。我已经使用 R 抓取数据一段时间了,可能不需要基础知识方面的帮助。经过进一步检查,该表确实是 Javascript,这就是问题所在,也是我需要帮助的地方
构建函数以将网页上的html表刮入变量的最佳方法是什么?
我希望能够传递一些唯一的标识符(如表ID或其他东西),它会将所有数据返回到像DataTable这样的东西.
我正在使用带有'lxml'和'requests'的python脚本来抓取一个网页.我的目标是从页面中获取元素并下载它,但内容在HTTPS页面上,并且在尝试访问页面中的内容时出现错误.我确信我必须包含某种证书或身份验证,但我很难找到合适的资源.我正在使用:
page = requests.get("https://[example-page.com]", auth=('[username]','[password]'))
Run Code Online (Sandbox Code Playgroud)
而错误是:
requests.exceptions.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib
Run Code Online (Sandbox Code Playgroud)