我写了一个scrapy程序来从一个站点抓取数据,如果我抓取到一个json文件或csv文件,这个程序会成功抓取,当我尝试抓取我的postgres数据库时出现问题,下图显示了我收到的错误, 如何修复错误:
def process_item(self, item, spider):
"""Save deals in the database.
This method is called for every item pipeline component.
"""
self.cur.execute("insert into Deals (Name,Deal_Url,Image_Url,Old_Price,Special_Price,Final_Price) values(%s,%s,%s,%s,%s,%s)",(item['Name'],item['Product_URL'],item['Image_URL'],item['Old_Price'],item['Special_Price'],item['Final_Price']))
self.connection.commit()
return item
Run Code Online (Sandbox Code Playgroud) 我有一个需要从使用 React 的网站中抓取的 url 列表,因此我使用 Puppeteer。我不想被反机器人服务器阻止,因此我添加了puppeteer-extra-plugin-stealth
我想阻止广告加载到页面上,所以我使用puppeteer-extra-plugin-来阻止广告adblocker
我还想防止我的IP地址被列入黑名单,所以我使用TOR节点来拥有不同的IP地址。下面是我的代码的简化版本,设置有效(TOR_port虽然webUrl是动态分配的,但为了简化我的问题,我将其分配为变量)。但有一个问题:
const puppeteer = require('puppeteer-extra');
const _StealthPlugin = require('puppeteer-extra-plugin-stealth');
const _AdblockerPlugin = require('puppeteer-extra-plugin-adblocker');
puppeteer.use(_StealthPlugin());
puppeteer.use(_AdblockerPlugin());
var TOR_port = 13931;
var webUrl ='https://www.zillow.com/homedetails/2861-Bass-Haven-Ln-Saint-Augustine-FL-32092/47739703_zpid/';
const browser = await puppeteer.launch({
dumpio: false,
headless: false,
args: [
`--proxy-server=socks5://127.0.0.1:${TOR_port}`,
`--no-sandbox`,
],
ignoreHTTPSErrors: true,
});
try {
const page = await browser.newPage();
await page.setViewport({ width: 1280, height: 720 });
await page.goto(webUrl, {
waitUntil: 'load',
timeout: 30000,
});
page
.waitForSelector('.price') …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试学习网络抓取并决定抓取一些不和谐的数据。代码如下:
import requests
import json
def retrieve_messages(channelid):
num=0
headers = {
'authorization': 'here we enter the authorization code'
}
r = requests.get(
f'https://discord.com/api/v9/channels/{channelid}/messages?limit=100',headers=headers
)
jsonn = json.loads(r.text)
for value in jsonn:
print(value['content'], '\n')
num=num+1
print('number of messages we collected is',num)
retrieve_messages('server id goes here')
Run Code Online (Sandbox Code Playgroud)
问题:当我尝试更改此处的限制时,messages?limit=100显然它只接受 0 到 100 之间的数字,这意味着我可以获得的最大消息数是 100。例如,我尝试将此数字更改为 900,以抓取更多消息。但后来我得到了错误TypeError: string indices must be integers。
关于如何获取频道中的所有消息有什么想法吗?
非常感谢您的阅读!
items.py classes
import scrapy
from scrapy.item import Item, Field
import json
class Attributes(scrapy.Item):
description = Field()
pages=Field()
author=Field()
class Vendor(scrapy.Item):
title=Field()
order_url=Field()
class bookItem(scrapy.Item):
title = Field()
url = Field()
marketprice=Field()
images=Field()
price=Field()
attributes=Field()
vendor=Field()
time_scraped=Field()
Run Code Online (Sandbox Code Playgroud)
我的刮刀
items.py classes
import scrapy
from scrapy.item import Item, Field
import json
class Attributes(scrapy.Item):
description = Field()
pages=Field()
author=Field()
class Vendor(scrapy.Item):
title=Field()
order_url=Field()
class bookItem(scrapy.Item):
title = Field()
url = Field()
marketprice=Field()
images=Field()
price=Field()
attributes=Field()
vendor=Field()
time_scraped=Field()
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
from scrapy.contrib.spiders import CrawlSpider, Rule …Run Code Online (Sandbox Code Playgroud) 我试图从给定的网站获取高尔夫球场的详细列表。我创建了一个刮板工具来刮取美国不同高尔夫球场的名称和地址。
我的问题是在我能够抓取的地址中。我注意到当刮入我的 CSV 文件时,第一行文本和第二行文本之间没有空格。在 HTML 文件中,我注意到两行文本由<br>标记分隔。
我如何在我的代码中解决这个问题,以便我正在抓取的两行文本在抓取到 CSV 时在它们之间提供一个空格?
这是我试图抓取的 HTML 看起来像这样:
<div class="location">10924 Verterans Memorial Dr<br>Abbeville, Louisiana, United States</div>
Run Code Online (Sandbox Code Playgroud)
我的代码的输出如下所示:
10924 Verterans Memorial DrAbbeville, Louisiana, United States
Run Code Online (Sandbox Code Playgroud)
请注意,“Memorial Dr”和“Abbeville”之间没有空格。如何更改它以便在刮擦时提供空间?
这是我的代码:
import csv
import requests
from bs4 import BeautifulSoup
courses_list = []
geolocator = ArcGIS ()
for i in range(1):
url="http://sites.garmin.com/clsearch/courses/search?course=&location=&country=US&state=&holes=&radius=&lang=en&search_submitted=1&per_page={}".format(i*20)
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
#print soup
g_data2 = soup.find_all("div",{"class":"result"})
#print g_data2
for item in g_data2:
try:
name = item.find_all("div",{"class":"name"})[0].text
print name
except: …Run Code Online (Sandbox Code Playgroud) 早上好,
\n我是使用 R 进行抓取的新手,并且很难以有用的方式从网页中抓取元素列表。
\n这是我的脚本
\nlibrary(rvest)\n\nurl <- read_html("https://www.pole-emploi.fr/annuaire/provins-77070")\n\nwebpage <- url %>%\n html_nodes('.zone') %>%\n html_text()\nwebpage\n \nRun Code Online (Sandbox Code Playgroud)\n当我运行脚本时,所有元素都挤在一起,之间没有任何空格,这是可以理解的,因为每个项目都包含在一个单独的元素中
[1] "77114GouaixHerm\xc3\xa9Noyen-sur-SeineVilliers-sur-Seine" \n [2] "77118BalloyBazoches-l\xc3\xa8s-BrayGravon" \nRun Code Online (Sandbox Code Playgroud)\n我想让它们像这样(或用逗号分隔)
\n[1] "77114 Gouaix Herm\xc3\xa9 Noyen-sur-Seine Villiers-sur-Seine" \n[2] "77118 Balloy Bazoches-l\xc3\xa8s-Bray Gravon"\nRun Code Online (Sandbox Code Playgroud)\n或者格式整洁更好
\n Postal City\n 77114 Gouaix\n 77114 Herm\xc3\xa9\n 77114 Noyen-sur-Seine\n 77114 Villiers-sur-Seine\nRun Code Online (Sandbox Code Playgroud)\n我尝试在页面中找到其他选择器或 Xpath,但没有成功。我最多的就是选择列表中的一个元素。
\n任何帮助将不胜感激。
\n提前致谢。
\n我想做的是在 NodeJs 上构建一个抓取应用程序,它可以实时监视聊天并将某些消息存储在任何数据库中?
我想做的是以下内容,我想从聊天平台流中捕获数据,从而捕获一些有用的信息来帮助那些正在做流媒体服务的人;
但我不知道如何开始使用 NodeJs 来做到这一点,
到目前为止我所能做的是捕获消息的数据,但是我无法实时监控新消息,这方面有什么帮助吗?
到目前为止我做了什么:
服务器.js
var express = require('express');
var fs = require('fs');
var request = require('request');
var puppeteer = require('puppeteer');
var app = express();
app.get('/', function(req, res){
url = 'https://www.nimo.tv/live/6035521326';
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url);
await page.waitForSelector('.msg-nickname');
const messages = await page.evaluate(() => {
return Array.from(document.querySelectorAll('.msg-nickname'))
.map(item => item.innerText);
});
console.log(messages);
})();
res.send('Check your console!')
});
app.listen('8081')
console.log('Magic happens on …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过网络抓取 Crunch Base 来查找某些公司的总资金金额。这是一个示例的链接。
起初,我尝试只使用漂亮的汤,但我不断收到错误消息:
访问此页面已被拒绝,因为我们认为您正在使用自动化工具来浏览\n网站。
然后我查找了如何伪造浏览器访问并更改了代码,但仍然出现相同的错误。我究竟做错了什么??
import requests
from bs4 import BeautifulSoup as BS
url = 'https://www.crunchbase.com/organization/incube-labs'
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(url, headers=headers)
print(response.content)
Run Code Online (Sandbox Code Playgroud) 我有一个使用 Selenium 和 Django 的 DigitalOcean (gunicorn/nginx) 网络应用程序。
我正在尝试从 3 个网站抓取数据并将这些数据保存在数据库中,但如果该过程花费超过 60 秒,我会收到此错误
502 Bad Gateway
nginx/1.14.0 (Ubuntu)
Run Code Online (Sandbox Code Playgroud)
如何延长或禁用 nginx 的响应等待时间?
我正在尝试从动态 JS 内容网站中抓取,我正在尝试获取当前页面的面包屑。
面包屑由 4 个名为 的类组成: '.breadcrumbs-link'
为此,我使用 scrapy-splash 编写了以下代码:
import scrapy
from scrapy_splash import SplashRequest
class MySpider(scrapy.Spider):
name = "quotes4"
start_urls = ["https://www.woolworths.com.au/shop/browse/drinks/cordials-juices-iced-teas/iced-teas"]
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url, callback=self.parse, endpoint='render.html',args= {'wait': 10})
def parse(self, response):
print ('Result:')
print(len(response.css('.breadcrumbs-link').extract())) # OUTPUT: 0
print(response.css('.breadcrumbs-link').extract()) # OUTPUT: []
Run Code Online (Sandbox Code Playgroud)
我的方法可能有什么问题?