我听说人们一直在写这些程序,我知道他们做了什么,但他们是如何做到的呢?我正在寻找一般概念.
screen-scraping html-content-extraction pdf-scraping web-scraping console-scraping
嗨我在我的Mac上安装了Python Scrapy,我试图在他们的网站上关注第一个例子.
他们试图运行命令:
scrapy crawl mininova.org -o scraped_data.json -t json
Run Code Online (Sandbox Code Playgroud)
我不太明白这是什么意思?看起来scrapy原来是一个单独的程序.而且我认为他们没有一个名为crawl的命令.在示例中,它们有一段代码,它是MininovaSpider类和TorrentItem的定义.我不知道这两个类应该去哪里,转到同一个文件,这个python文件的名称是什么?
问题:当我尝试执行脚本时,BeautifulSoup(html, ...)给出错误消息"TypeError:类型'对象的对象'没有len().我尝试将实际的html作为参数传递,但它仍然不起作用.
import requests
url = 'http://vineoftheday.com/?order_by=rating'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html, "html.parser")
Run Code Online (Sandbox Code Playgroud) 我发现了许多教程,解释了如何使用node.js刮取不需要身份验证/登录的公共网站.
有人可以解释如何使用node.js抓取需要登录的网站吗?
我目前正在尝试使用CasperJS和PhantomJS(这两个都是优秀的工具,感谢n1k0和Ariya)来抓取谷歌关键字工具,但我无法让它发挥作用.
这是我目前的流程:
Search.我坚持第3步:搜索表单不是常规HTML表单,我不能使用Casper#fill(),所以我直接访问字段.以下是我尝试更改Word or phrase字段值的一些语法:
this.evaluate(function() {
// Trying to change the value...
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';
document.querySelector('textarea.sP3.sBFB').setAttribute('value', 'MY SUPER KEYWORDS');
document.querySelector('textarea').value = 'MY SUPER KEYWORDS'; // there's only one <textarea> on the page
// Trying to change other attributes...
document.querySelector('textarea.sP3.sBFB').textContent = 'MY SUPER KEYWORDS';
document.querySelector('textarea').style.backgroundColor = 'yellow';
});
Run Code Online (Sandbox Code Playgroud)
什么都行不通.我正在做一个Casper#capture()正确的,看看该字段包含什么.正如您所看到的,它确认我在正确的页面上并且我已登录,但它<textarea>是空的.
奇怪的是,我可以访问DOM的其他部分:我可以改变一个链接,说的文本Advanced Options and Filters来___VINCE SAYS HELLO___(见截图),通过执行以下操作:
this.evaluate(function() { …Run Code Online (Sandbox Code Playgroud) 我正在为http://asdfree.com/编写一组可自由下载的R脚本,以帮助人们分析英国数据服务托管的复杂样本调查数据.除了为这些数据集提供大量统计教程之外,我还想自动下载和导入此调查数据.为了做到这一点,我需要弄清楚如何以编程方式登录这个英国数据服务网站.
我已经尝试了许多不同的RCurl和httr配置来登录,但是我在某个地方犯了一个错误而且我被卡住了.我已经尝试检查这篇文章中概述的元素,但网站在浏览器中跳得太快,让我无法理解发生了什么.
这个网站确实需要登录名和密码,但我相信在进入登录页面之前我犯了一个错误.
起始页应为:https://www.esds.ac.uk/secure/UKDSRegister_start.asp
此页面将自动将您的Web浏览器重定向到以以下内容开头的长URL: https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah]
(1)由于某种原因,SSL证书在本网站上不起作用.这是我发布的有关此问题的SO问题.我使用的解决方法是忽略SSL:
library(httr)
set_config( config( ssl.verifypeer = 0L ) )
Run Code Online (Sandbox Code Playgroud)
然后我在起始网站上的第一个命令是:
z <- GET( "https://www.esds.ac.uk/secure/UKDSRegister_start.asp" )
Run Code Online (Sandbox Code Playgroud)
这给了我一个z$url看起来很像https://wayf.ukfederation.org.uk/DS002/uk.ds?[blahblahblah]我的浏览器也重定向的页面.
然后,在浏览器中,您应该输入"英国数据存档"并单击continue按钮.当我这样做时,它会将我重定向到网页https://shib.data-archive.ac.uk/idp/Authn/UserPassword
我认为这是我被困的地方,因为我无法弄清楚如何followlocation在这个网站上获得cURL 和土地.注意:尚未输入用户名/密码.
当我使用wayf.ukfederation.org.uk页面中的httr GET命令时,如下所示:
y <- GET( z$url , query = list( combobox = "https://shib.data-archive.ac.uk/shibboleth-idp" ) )
Run Code Online (Sandbox Code Playgroud)
该y$url字符串看起来很像z$url(除非它有一个下拉框=上年底).有没有办法通过RCurl或httr进入此uk data …
我想从这个网页下载数据
数据很容易被删除rvest.
代码可能是这样的:
library(rvest)
library(pipeR)
url <- "http://www.tradingeconomics.com/"
css <- "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"
data <- url %>>%
html() %>>%
html_nodes(css) %>>%
html_table()
Run Code Online (Sandbox Code Playgroud)
但是像这样的网页存在问题.
有一个+按钮显示所有国家/地区的数据,但默认值只是50个国家/地区的数据.
因此,如果我使用代码,我可以抓取50个国家/地区的数据.
该+按钮是在人的javascript,所以我想知道是否有在某种程度上R点击按钮,然后刮数据.
所以我最近在youtube上使用"新波士顿"视频开始学习Python,一切都很顺利,直到我开始制作一个简单的网络爬虫教程.虽然我理解它没有问题,但当我运行代码时,我得到的错误似乎都基于"SSL:CERTIFICATE_VERIFY_FAILED".自昨晚以来我一直在寻找答案,试图弄清楚如何修复它,似乎没有其他人在视频或他的网站上的评论中遇到与我相同的问题,甚至使用他的某些人的代码网站我得到了相同的结果.我将从网站上发布的代码发布代码,因为它给了我同样的错误,而我编码的代码现在变得一团糟.
import requests
from bs4 import BeautifulSoup
def trade_spider(max_pages):
page = 1
while page <= max_pages:
url = "https://www.thenewboston.com/forum/category.php?id=15&orderby=recent&page=" + str(page) #this is page of popular posts
source_code = requests.get(url)
# just get the code, no headers or anything
plain_text = source_code.text
# BeautifulSoup objects can be sorted through easy
for link in soup.findAll('a', {'class': 'index_singleListingTitles'}): #all links, which contains "" class='index_singleListingTitles' "" in it.
href = "https://www.thenewboston.com/" + link.get('href')
title = link.string # just the text, not the HTML …Run Code Online (Sandbox Code Playgroud) 如果我的班级名字经常不同,比如说:
listing-col-line-3-11 dpt 41
listing-col-block-1-22 dpt 41
listing-col-line-4-13 CWK 12
Run Code Online (Sandbox Code Playgroud)
通常我可以这样做:
for EachPart in soup.find_all("div", {"class" : "ClassNamesHere"}):
print EachPart.get_text()
Run Code Online (Sandbox Code Playgroud)
有太多的类名可以在这里使用,所以其中一些是出来的.
我知道Python没有我通常会使用的".contains"但它确实有一个"in".虽然我还没有找到一种方法来融入它.
我希望有一种方法可以用正则表达式做到这一点.虽然我的Python语法真的让我失望但我一直在尝试变化:
regex = re.compile('.*listing-col-.*')
for EachPart in soup.find_all(regex):
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有成功.
电报机器人可以读取/访问我或机器人既不是管理员的电报频道吗?
我知道直到去年11月才有可能,但我听说有些人已经这样做了,但到目前为止我无法做到.
我非常感谢您的投入和知识.
Ps任何解决方法都会很棒.
web-scraping ×10
python ×5
javascript ×2
r ×2
rcurl ×2
curl ×1
html ×1
httr ×1
node.js ×1
parsing ×1
pdf-scraping ×1
phantomjs ×1
regex ×1
rvest ×1
scrapy ×1
ssl ×1
telegram ×1
telegram-bot ×1