小编bar*_*rny的帖子

ThreadPoolExecutor 与 threading.Thread

我有一个关于ThreadPoolExecutorvsThread类本身性能的问题,在我看来,我缺乏一些基本的理解。

我有两个功能的网络爬虫。首先解析网站主页的每个图像的链接,然后从解析的链接加载图像:

import threading
import urllib.request
from bs4 import BeautifulSoup as bs
import os
from concurrent.futures import ThreadPoolExecutor

path = r'C:\Users\MyDocuments\Pythom\Networking\bbc_images_scraper_test'
url = 'https://www.bbc.co.uk'

# Function to parse link anchors for images
def img_links_parser(url, links_list):
    res = urllib.request.urlopen(url)
    soup = bs(res,'lxml')
    content = soup.findAll('div',{'class':'top-story__image'})

    for i in content:
        try:
            link = i.attrs['style']
            # Pulling the anchor from parentheses
            link = link[link.find('(')+1 : link.find(')')]
            # Putting the anchor in the list of links
            links_list.append(link)
        except: …
Run Code Online (Sandbox Code Playgroud)

multithreading python-3.x threadpoolexecutor

5
推荐指数
1
解决办法
4548
查看次数

抓取多个位置的谷歌街景图像

我想通过代码下载谷歌街景图像,我确实做到了,但我遇到了一些问题。我想使用多个位置的 180 度摄像头下载单个街景图像。

为此,我在 python 中使用了 pypi 的 google-streetview 1.2.4 库。代码如下。 https://pypi.org/project/google-streetview/ https://rrwen.github.io/google_streetview/#

# Import google_streetview for the api and helper module
import google_streetview.api
import google_streetview.helpers

# Create a dictionary with multiple parameters separated by ;
apiargs = {
  'location': '23.87,90.3939;23.87,90.3944;23.87,90.3951;23.87,90.3959',
  'size': '640x300',
  'heading': '0;90;180',

  'pitch': '0;0;0;0',
  'key': 'google_dev_key'
}

# Get a list of all possible queries from multiple parameters
api_list = google_streetview.helpers.api_list(apiargs)

# Create a results object for all possible queries
results = google_streetview.api.results(api_list)

# Preview results
results.preview() …
Run Code Online (Sandbox Code Playgroud)

python web-scraping google-street-view

5
推荐指数
1
解决办法
1732
查看次数

公司代理/防火墙背后的 RSelenium

我正在尝试运行 Selenium 从我公司的内部网站上抓取信息。我一直遇到以下错误:

驱动程序<- rsDriver(浏览器=c(“chrome”)

检查 Selenium 服务器版本:BEGIN:PREDOWNLOAD open.connection(con,“rb”)中的错误:无法连接到 www.googleapis.com端口 443:超时

我已经尝试过这篇文章中的解决方案,但它在代理后面的 RSelenium不起作用

我也在论坛上搜索过,因为过去有很多人遇到过类似的问题,但与 R 相关的人并不多。其他职位涉及的职能现已不复存在。还有其他办法吗?

r selenium-webdriver

5
推荐指数
0
解决办法
674
查看次数

Http - 隧道连接失败:Python 网页抓取出现 403 Forbidden 错误

我正在尝试网络抓取 http 网站,当我尝试阅读该网站时出现以下错误。

HTTPSConnectionPool(host='proxyvipecc.nb.xxxx.com', port=83): Max retries exceeded with url: http://campanulaceae.myspecies.info/ (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 403 Forbidden',)))
Run Code Online (Sandbox Code Playgroud)

下面是我在类似网站上编写的代码。我尝试使用 urllib 和 user-agent 但仍然存在同样的问题。

url = "http://campanulaceae.myspecies.info/"

response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'})
soup = BeautifulSoup(response.text, 'html.parser')

Run Code Online (Sandbox Code Playgroud)

谁能帮我解决这个问题。提前致谢

python http-error web-scraping

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

在scrapy中为每个类别制作单独的输出文件

我试图根据其类别黄页。所以我从文本文件加载类别并将其提供给 start_urls。我在这里面临的问题是为每个类别分别保存输出。以下是我尝试实现的代码:

CATEGORIES = []
with open('Catergories.txt', 'r') as f:
    data = f.readlines()

    for category in data:
        CATEGORIES.append(category.strip())
Run Code Online (Sandbox Code Playgroud)

打开 settings.py 中的文件并制作一个列表以在蜘蛛中访问。

蜘蛛:

# -*- coding: utf-8 -*-
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

from ..items import YellowItem
from scrapy.utils.project import get_project_settings

settings = get_project_settings()


class YpSpider(CrawlSpider):
    categories = settings.get('CATEGORIES')

    name = 'yp'
    allowed_domains = ['yellowpages.com']

    start_urls = ['https://www.yellowpages.com/search?search_terms={0}&geo_location_terms=New%20York'
                      '%2C '
                      '%20NY'.format(*categories)]
    rules = (

        Rule(LinkExtractor(restrict_xpaths='//a[@class="business-name"]', allow=''), callback='parse_item',
             follow=True),

        Rule(LinkExtractor(restrict_xpaths='//a[@class="next ajax-page"]', allow=''),
             follow=True),
    )

    def parse_item(self, …
Run Code Online (Sandbox Code Playgroud)

python csv scrapy export-to-csv

5
推荐指数
1
解决办法
270
查看次数

如何使用 python 绕过机器人检测并抓取网站

问题

我是网络抓取的新手,我试图创建一个抓取器,它可以查看播放列表链接并获取音乐和作者的列表。

但该网站一直拒绝我的连接,因为它认为我是机器人,所以我使用 UserAgent 创建一个假的 useragent 字符串来尝试绕过过滤器。

有点效果吗?但问题是,当你通过浏览器访问网站时,你可以看到播放列表的内容,但是当你尝试用请求提取html代码时,播放列表的内容只是一个很大的空白。

也许我必须等待页面加载?或者有更强大的机器人过滤器?

我的代码

import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent

ua = UserAgent()

melon_site="http://kko.to/IU8zwNmjM"

headers = {'User-Agent' : ua.random}
result = requests.get(melon_site, headers = headers)


print(result.status_code)
src = result.content
soup = BeautifulSoup(src,'html.parser')
print(soup)

Run Code Online (Sandbox Code Playgroud)

网站链接

播放列表链接

使用请求时得到的 html

html 播放列表应该有空白

python beautifulsoup web-scraping python-requests botdetect

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

多线程 Spring-boot 控制器方法

因此,我的应用程序 (spring-boot) 运行速度非常慢,因为它使用 Selenium 来抓取数据、处理数据并显示在主页中。我遇到了多线程,我认为它可以对我的应用程序有用以使其运行得更快,但是教程似乎显示在带有 main.js 的普通 java 应用程序的设置中。如何在我的控制器中多线程这个单一方法?

get.. 的方法都是 selenium 方法。我希望同时运行这 4 行代码

   @Autowired
        private WebScrape webscrape;
    
    @RequestMapping(value = "/")
    public String printTable(ModelMap model) {
        model.addAttribute("alldata", webscrape.getAllData());
        model.addAttribute("worldCases", webscrape.getWorlValues().get(0));
        model.addAttribute("worldDeaths", webscrape.getWorlValues().get(1));
        model.addAttribute("worldPop", webscrape.getWorlValues().get(2));

        return "index";
    }
Run Code Online (Sandbox Code Playgroud)

java spring multithreading threadpool spring-boot

5
推荐指数
0
解决办法
87
查看次数

如何通过多线程代码python提高Webscraping代码速度

下面是我逐行编写的代码(大约有900 页,每行 10 行和 5 个数据)有什么办法可以使它更快。目前将数据导出到 csv需要80 分钟。有什么方法可以对页面进行并行请求并提高此代码的效率。

import requests
from urllib3.exceptions import InsecureRequestWarning
import csv

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
from bs4 import BeautifulSoup as bs

f = csv.writer(open('GEM.csv', 'w', newline=''))
f.writerow(['Bidnumber', 'Items', 'Quantitiy', 'Department', 'Enddate'])


def scrap_bid_data():
    page_no = 1
    while page_no < 910:
        print('Hold on creating URL to fetch data...')
        url = 'https://bidplus.gem.gov.in/bidlists?bidlists&page_no=' + str(page_no)
        print('URL created: ' + url)
        scraped_data = requests.get(url, verify=False)
        soup_data = bs(scraped_data.text, 'lxml')
        extracted_data = soup_data.find('div', {'id': 'pagi_content'})
        if len(extracted_data) == 0: …
Run Code Online (Sandbox Code Playgroud)

python multithreading asynchronous threadpool python-multithreading

5
推荐指数
0
解决办法
142
查看次数

Asyncio,由于哨兵问题,任务没有正确完成

我正在尝试使用预定义数量的工作人员进行一些网络抓取,作为学习。

我使用Noneas 作为哨兵来打破 while 循环并停止工作人员。

每个worker的速度各不相同,在最后一个url传递gather_search_links到获取链接之前,所有worker都被关闭。

我尝试使用asyncio.Queue,但与 deque 相比,我的控制力更小。

async def gather_search_links(html_sources, detail_urls):
    while True:
        if not html_sources:
            await asyncio.sleep(0)
            continue

        data = html_sources.pop()
        if data is None:
            html_sources.appendleft(None)
            break
        data = BeautifulSoup(data, "html.parser")
        result = data.find_all("div", {"data-component": "search-result"})
        for record in result:
            atag = record.h2.a
            url = f'{domain_url}{atag.get("href")}'
            detail_urls.appendleft(url)
        print("apended data", len(detail_urls))
        await asyncio.sleep(0)


async def get_page_source(urls, html_sources):
    client = httpx.AsyncClient()
    while True:
        if not urls:
            await asyncio.sleep(0)
            continue

        url = urls.pop()
        print("url", …
Run Code Online (Sandbox Code Playgroud)

python-3.x async-await python-asyncio

5
推荐指数
1
解决办法
195
查看次数

Express 或 Axios 错误:套接字挂起代码:ECONNRESET

这是我第一次在这里发布问题,如果缺少一些数据,请抱歉。

我正在尝试进行一些网络抓取以获取表格的一些信息。该页面仅响应index.php,当我使用搜索表单时,它会使用一些formData 向index.php?go=le 发送POST。为了避免 CORS 问题,我使用在本地主机中运行的我自己的 API 来发布帖子。我将前端指向我的 API,然后从本地主机获得响应。那里没问题。

当我尝试向我的 API 发出第二个请求时,我的问题出现了。第一个 GET 工作正常,但在响应之后它一直失败。
当我重新启动服务器时,它会再次工作,但只工作一次。

这是我的 API 代码。我用来nodemon server.js启动我的服务器。

服务器.js

const express = require("express");
const axios = require("axios");
const scrape = require("scrape-it");
const FormData = require("form-data")
const cors = require("cors")

const app = express();
const PORT = process.env.PORT || 5000;

app.use(cors())

const config = {
    headers: {
        'Content-type': 'multipart/form-data'
    },
    
}

app.get("/get-projects", async (req,res) => {
    const testJSON = await axios.post(baseURL +"/index.php?go=le",formData,config)
        .then(res => {
                console.log("Post …
Run Code Online (Sandbox Code Playgroud)

node.js express econnreset axios

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