首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >网页内容刮取问题/汽车交易网站

网页内容刮取问题/汽车交易网站
EN

Stack Overflow用户
提问于 2017-04-15 11:13:49
回答 1查看 313关注 0票数 0

问题

我想租一些特定的网站(汽车销售平台)。

坦白地说,CSS太让我迷惑了,以至于我无法自己找出问题所在。

代码语言:javascript
运行
AI代码解释
复制
#### scraping the website www.otomoto.pl with used cars #####

baseURL_otomoto = "https://www.otomoto.pl/osobowe/?page="

i <- 1

for ( i in 1:7000 )
{
  link = paste0(baseURL_otomoto,i)
  out = read_html(link)
  print(i)
  print(link)

  ### building year 
  build_year  = html_nodes(out, xpath = '//*[@id="body-container"]/div[2]/div[1]/div/div[6]/div[2]/article[1]/div[2]/div[3]/ul/li[1]') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()

  mileage  = html_nodes(out, xpath = '//*[@id="body-container"]/div[2]/div[1]/div/div[6]/div[2]/article[1]/div[2]/div[3]/ul/li[2]') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()

  volume  = html_nodes(out, xpath = '//*[@id="body-container"]/div[2]/div[1]/div/div[6]/div[2]/article[1]/div[2]/div[3]/ul/li[3]') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()

  fuel_type  = html_nodes(out, xpath = '//*[@id="body-container"]/div[2]/div[1]/div/div[6]/div[2]/article[1]/div[2]/div[3]/ul/li[4]') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()


  price = html_nodes(out, xpath = '//div[@class="offer-item__price"]') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()

  link = html_nodes(out, xpath = '//div[@class="offer-item__title"]') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()

  offer_details = html_nodes(out, xpath = '//*[@id="body-container"]/div[2]/div[1]/div/div[6]/div[2]/article[1]/div[2]/div[3]/ul') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()

有人猜测这种行为的原因是什么?

PS#1.

如何将所有build_type、里程和fuel_type数据作为data.frame从分析过的网站上一次获得?使用类(xpath =‘//div[@class=.])在我的案子里没有用

PS#2.

我想用f.i获取实际报价的细节。

代码语言:javascript
运行
AI代码解释
复制
gear_type = html_nodes(out, xpath = '//*[@id="parameters"]/ul[1]/li[10]/div') %>%
    html_text() %>%
    str_replace_all("\n","") %>%
    str_replace_all("\r","") %>%
    str_trim()

争论

  • 在ula中表示a in (1:2) &
  • 在lib中是b in (1:12)

不幸的是,尽管这个概念失败了,因为生成的数据框架是空的。有猜到原因吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-29 04:23:57

首先,了解CSS选择器和XPath。你的选择器很长,而且非常脆弱(其中一些对我来说根本没用,仅仅两周后)。例如,而不是:

代码语言:javascript
运行
AI代码解释
复制
html_nodes(out, xpath = '//*[@id="body-container"]/div[2]/div[1]/div/div[6]/div[2]/article[1]/div[2]/div[3]/ul/li[1]') %>%
    html_text()

你可以写:

代码语言:javascript
运行
AI代码解释
复制
html_nodes(out, css="[data-code=year]") %>% html_text()

第二,阅读您使用的库的文档。str_replace_all模式可能是正则表达式,它为您节省了一个调用(使用str_replace_all("[\n\r]", "")而不是str_replace_all("\n","") %>% str_replace_all("\r",""))。html_text可以为您进行文本修整,这意味着根本不需要str_trim()

第三,如果复制粘贴一些代码,退一步考虑函数是否是更好的解决方案;通常情况下是这样的。在您的情况下,我个人可能会跳过str_replace_all调用,直到数据清理步骤,然后在data.frame上调用它们,保存整个废弃的数据。

要从数据中创建data.frame,可以使用列名和内容调用data.frame()函数,如下所示:

代码语言:javascript
运行
AI代码解释
复制
data.frame(build_year = build_year,
    mileage = mileage,
    volume = volume,
    fuel_type = fuel_type,
    price = price,
    link = link,
    offer_details = offer_details)

或者只使用一列初始化data.frame,然后将进一步的向量添加为列:

代码语言:javascript
运行
AI代码解释
复制
output_df <- data.frame(build_year = html_nodes(out, css="[data-code=year]") %>% html_text(TRUE))
output_df$volume <- html_nodes(out, css="[data-code=engine_capacity]") %>%
  html_text(TRUE)

最后,您应该注意到,data.frame列必须都是相同的长度,而您所丢弃的一些数据是可选的。在写这个答案的时候,我很少有没有引擎容量和没有描述的报价。您必须连续使用两个html_nodes调用(因为单个CSS选择器将不匹配不存在的内容)。但即便如此,html_nodes也会悄悄地删除丢失的数据。这可以通过将html_nodes输出管道传输到html_node调用来解决:

代码语言:javascript
运行
AI代码解释
复制
current_df$volume  = out %>% html_nodes("ul.offer-item__params") %>% 
    html_node("[data-code=engine_capacity]") %>% 
    html_text(TRUE)

下面是我的循环内部处理方法的最后版本。只需确保在调用空data.frame之前初始化它,并将当前迭代的输出与最终数据框架(例如rbind)合并,否则每次迭代都会覆盖上一次迭代的结果。或者您可以使用do.call(rbind, lapply()),这是用于此类任务的惯用的R。

另外,在抓取大量快速变化的数据时,要考虑数据下载和数据处理的解耦步骤。假设有一个你没有考虑的角落情况,它会导致R终止。如果在迭代过程中出现这样的条件,您将如何进行?您停留在一个页面上的时间越长,您引入的副本就越多(因为更多的报价出现,而现有的报价被推倒在更多的页面上),而更多的报价是您错过的(因为销售结束,要约永远消失)。

代码语言:javascript
运行
AI代码解释
复制
current_df <- data.frame(build_year = html_nodes(out, css="[data-code=year]") %>% html_text(TRUE))

current_df$mileage  = html_nodes(out, css="[data-code=mileage]") %>%
  html_text(TRUE)

current_df$volume  = out %>% html_nodes("ul.offer-item__params") %>% 
    html_node("[data-code=engine_capacity]") %>% 
    html_text(TRUE)

current_df$fuel_type  = html_nodes(out, css="[data-code=fuel_type]") %>%
  html_text(TRUE)

current_df$price = out %>% html_nodes(xpath="//div[@class='offer-price']//span[contains(@class, 'number')]") %>% 
  html_text(TRUE)

current_df$link = out %>% html_nodes(css = "div.offer-item__title h2 > a") %>% 
  html_text(TRUE) %>% 
  str_replace_all("[\n\r]", "")

current_df$offer_details = out %>% html_nodes("div.offer-item__title") %>% 
    html_node("h3") %>% 
    html_text(TRUE)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43430228

复制
相关文章
网站被篡改_网页内容修改
NetCMS的相关新闻显示是根据新闻的Tag来查找所有具有相同的Tag的新闻,然后将其显示的。如,某条新闻的Tag是“工资|奖金”,那么会用下列SQL语句来查找具有相同Tag的新闻:
全栈程序员站长
2022/11/11
2.2K0
Python抓取网页内容
import urllib.request response=urllib.request.urlopen("http://www.baidu.com") print(response.read())
py3study
2020/01/06
3.5K0
网页内容---HTML后续
1.表格 <!-- table:声明一个表格 tr:声明表格的行 th、td:声明表格的单元格 th:表头 td:普通的单元格 caption:表格的标题 table: border:表格的边框大小 cellspacing:单元格和边框的间距 cellpadding:单元格边框与内容的距离
用户10216580
2022/12/06
4.1K0
检测网页编码+读取网页内容 原
import chardet #字符集检测 import urllib.request # 网址 url = "http://www.baidu.com/"
双面人
2019/04/10
1.6K0
phpCURL抓取网页内容
如果你模拟登录失败了,那么很可能你要登录的网站有反爬虫机制,比如验证码,比如token,比如用的Ajax同时又不允许跨域
超级小可爱
2023/02/20
1.3K0
网页内容监控 – 怎么才能做到网站内容实时推送百度?「建议收藏」
运用业界领先的爬虫技术,判断页面内容是否有新内容产出,并过滤非站内内容,然后将内容链接推送至百度各个数据推送接口(如熊掌号、移动专区等)。
全栈程序员站长
2022/09/09
7670
网页爬虫小记:两种方式的爬取网站内容
此处进行简单的分类,对于普通的网页爬取内容,如果没有登录界面可以直接使用Jsoup的API进行爬取;
小勇DW3
2018/10/11
8150
网页爬虫小记:两种方式的爬取网站内容
使用BeautifulSoup解析网页内容
BeautifulSoup模块用于解析html和xml文档中的内容,相比正则表达式,其更好的利用了html这种结构性文档的树状结构,解析起来更加方便。
生信修炼手册
2020/11/09
3K0
使用BeautifulSoup解析网页内容
网页内容变化监控提醒
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/160579.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/09
3.7K0
[955]readability网页内容提取器
github:https://github.com/buriy/python-readability/
周小董
2021/04/13
1.5K0
通过Url抓取网页内容
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
Java架构师必看
2021/03/22
1.8K0
python 抓网页内容分析
用Python语言写搜索引擎蜘蛛的脚本非常简单、轻松。给大家分享两种抓网页内容的方法 一、用urllib2/sgmllib包,将目标网页的所有URL列出。 import urllib2 from sgmllib import SGMLParser class URLLister(SGMLParser):     def reset(self):                                    SGMLParser.reset(self)         self.urls = []     def start_a(self, attrs):                            href = [v for k, v in attrs if k=='href']         if href:             self.urls.extend(href) f = urllib2.urlopen("http://www.baidu.com/") if f.code == 200:     parser = URLLister()     parser.feed(f.read())     f.close()     for url in parser.urls: print url 二、用python调用IE抓取目标网页(Require win32com, pythoncom)的所有图像的url和大小 import win32com.client, pythoncom import time ie = win32com.client.DispatchEx('InternetExplorer.Application.1') ie.Visible = 1 ie.Navigate("http://news.sina.com.cn") while ie.Busy:     time.sleep(0.05) doc = ie.Document for i in doc.p_w_picpaths:     print i.src, i.width, i.height 这种方法可以利用IE本身的Javascript. DHTML的支持,来做自动提交Form,和处理Javascript。 有关样例可以参考http://win32com.de
py3study
2020/01/07
8140
把网页内容全部导入word
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>   <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">      
hbbliyong
2018/03/05
1.4K0
网页自动跳转_网页跳转到其他网站
关闭浏览器,然后删除c:/program files/Internet Explorer/3348201013.dat
全栈程序员站长
2022/11/10
2.2K0
【Lighthouse教程】网页内容抓取入门
网页内容抓取(Web Scraping)是指通过网页抓取工具(即Web Crawler,亦称网页爬虫)对指定网页进行设定行为的自动访问,并进行数据分析提取、最终持久化至电子表格/数据库等存储的过程。此类工作对于科学研究、推荐系统设计、大数据挖掘分析、人工智能、商业分析等多类应用领域都是不可或缺的关键步骤。
溪歪歪
2020/06/15
7K5
【Lighthouse教程】网页内容抓取入门
网页内容加速黑科技趣谈
数周前,在伦敦 Heathrow 机场等飞机的空闲中,我顺便处理了一些工作上的事情。不经意间发现 Github 在性能方面的一些问题,颇为诧异。通过新 tab 打开的页面,其加载速度竟然比直接点击链接打开的页面要快。不信请看视频(译者注:可能需要科学上网):GitHub link click vs new tab。
疯狂的技术宅
2019/03/27
2.9K0
网页内容加速黑科技趣谈
震惊!网页内容变成了天书!
URL 是统一资源定位器,是用来引导指向对应的网络资源的,狭义来说查询字符串并不是 URL 的一部分,URL 是由协议、域名、端口和 URI 组成的。URI 是统一资源标识符,是用来引导指向某站点的服务资源的。
用户5521279
2019/12/19
7020
使用 Beautiful Soup 解析网页内容
本文讲述如何使用Python的requests库和BeautifulSoup库提取网页中的文本内容。首先介绍了requests库的基本用法,然后通过一个实例详细讲解了如何使用requests库和BeautifulSoup库提取网页中的文本内容,最后介绍了使用BeautifulSoup进行网页解析的方法。
乐百川
2018/01/08
3.1K0
使用 Beautiful Soup 解析网页内容
【网页内容检测】如何利用腾讯云COS对网页内容安全检测审核API接口?
本接口用于提交一个网页审核任务。网页审核功能为异步任务方式,您可以通过提交网页审核任务审核您的网页,然后通过查询网页审核任务接口查询审核结果。
TCS-F
2022/01/07
4.4K0
【网页内容检测】如何利用腾讯云COS对网页内容安全检测审核API接口?
点击加载更多

相似问题

使用Python/selenium刮取网页的内容

20

如何处理本网站的网页刮取格式?

12

如何在不影响url的网页上刮取网站

18

循环浏览网页到网页刮取

15

使用Rvest刮取网页

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文