小编bar*_*rny的帖子

psycopg2.errors.InFailedSqlTransaction:当前事务被中止,命令被忽略,直到事务块结束

我写了一个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)

python postgresql psycopg2 scrapy python-3.x

4
推荐指数
1
解决办法
3412
查看次数

如何将 puppeteer 插件与 puppeteer 集群结合起来?

我有一个需要从使用 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)

javascript node.js puppeteer puppeteer-cluster

4
推荐指数
1
解决办法
3719
查看次数

使用python在discord上抓取数据

我目前正在尝试学习网络抓取并决定抓取一些不和谐的数据。代码如下:

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

关于如何获取频道中的所有消息有什么想法吗?

非常感谢您的阅读!

python web-scraping discord

4
推荐指数
1
解决办法
1万
查看次数

在将它们存储到 couchdb 时,scrapy 项目不是 JSON 可序列化的

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)

python json couchdb scrapy

3
推荐指数
1
解决办法
3002
查看次数

<br> 标记使用漂亮的汤和 python 从抓取中搞砸了我的数据

我试图从给定的网站获取高尔夫球场的详细列表。我创建了一个刮板工具来刮取美国不同高尔夫球场的名称和地址。

我的问题是在我能够抓取的地址中。我注意到当刮入我的 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)

python csv screen-scraping beautifulsoup

3
推荐指数
1
解决办法
1563
查看次数

使用 Rvest 抓取 &lt;li&gt; 元素

早上好,

\n

我是使用 R 进行抓取的新手,并且很难以有用的方式从网页中抓取元素列表。

\n

这是我的脚本

\n
library(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 \n
Run Code Online (Sandbox Code Playgroud)\n

当我运行脚本时,所有元素都挤在一起,之间没有任何空格,这是可以理解的,因为每个项目都包含在一个单独的元素中

  • 标签。

    \n

     [1] "77114GouaixHerm\xc3\xa9Noyen-sur-SeineVilliers-sur-Seine"                                                                                                                                 \n [2] "77118BalloyBazoches-l\xc3\xa8s-BrayGravon"     \n
    Run 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"\n
    Run 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\n
    Run Code Online (Sandbox Code Playgroud)\n

    我尝试在页面中找到其他选择器或 Xpath,但没有成功。我最多的就是选择列表中的一个元素。

    \n

    任何帮助将不胜感激。

    \n

    提前致谢。

    \n
  • r rvest

    3
    推荐指数
    1
    解决办法
    3262
    查看次数

    使用 Nodejs 实时抓取聊天记录

    我想做的是在 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)

    node.js firebase puppeteer

    3
    推荐指数
    1
    解决办法
    1864
    查看次数

    使用用户代理头时 Webscraping CrunchBase 访问被拒绝

    我正在尝试通过网络抓取 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)

    python wget beautifulsoup web-scraping python-requests

    3
    推荐指数
    1
    解决办法
    2690
    查看次数

    使用 Selenium 和 Django 的 DigitalOcean (gunicorn/nginx) 的 502 错误网关

    我有一个使用 Selenium 和 Django 的 DigitalOcean (gunicorn/nginx) 网络应用程序。

    我正在尝试从 3 个网站抓取数据并将这些数据保存在数据库中,但如果该过程花费超过 60 秒,我会收到此错误

    502 Bad Gateway
    nginx/1.14.0 (Ubuntu)
    
    Run Code Online (Sandbox Code Playgroud)

    如何延长或禁用 nginx 的响应等待时间?

    django selenium nginx gunicorn digital-ocean

    3
    推荐指数
    1
    解决办法
    5896
    查看次数

    Scrapy-splash response.css() 无法获取元素

    我正在尝试从动态 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)

    我的方法可能有什么问题?

    python scrapy web-scraping python-3.x scrapy-splash

    3
    推荐指数
    1
    解决办法
    480
    查看次数