我在使用python抓取网页时遇到了不同类型的问题.单击图像时,图像下会出现有关其"味道"的新信息.我的目标是解析连接到每个图像的所有风味.我的脚本可以解析当前活动图像的风格,但在单击新图像后会中断.我的循环中的一点点抽搐会引导我走向正确的方向.
我尝试过:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.optigura.com/uk/product/gold-standard-100-whey/")
wait = WebDriverWait(driver, 10)
while True:
items = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='colright']//ul[@class='opt2']//label")))
for item in items.find_elements_by_xpath("//div[@class='colright']//ul[@class='opt2']//label"):
print(item.text)
try:
links = driver.find_elements_by_xpath("//span[@class='img']/img")
for link in links:
link.click()
except:
break
driver.quit()
Run Code Online (Sandbox Code Playgroud)
下面的图片可能会澄清我无法做到的事情:
我在python中编写了一个与selenium结合使用的脚本来解析网页中的一些项目.无论如何我无法让它工作.我所追求的物品(可能)在其中iframe
.我试图切换它,但这没有任何影响.我还没有得到任何东西,除非TimeoutException
它碰到了我试图切换的线iframe
.我怎样才能让它运转起来.提前致谢:
这里是网页链接:URL
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
url = "replace_with_above_url"
driver = webdriver.Chrome()
driver.get(url)
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "tradingview_fe623")))
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".quick .apply-common-tooltip"))):
print(item.text)
driver.quit()
Run Code Online (Sandbox Code Playgroud)
我追求的物品所在的元素:
<div class="quick">
<span class="apply-common-tooltip">5</span>
<span class="apply-common-tooltip">1h</span>
<span class="apply-common-tooltip selected">1D</span>
<span class="apply-common-tooltip">1M</span>
<span class="apply-common-tooltip">1D</span>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我期望的输出(当我尝试使用css选择器时它在本地工作):
5
1h
1D
1M
1D
Run Code Online (Sandbox Code Playgroud)
这是它在网络上的样子:
有谁知道如何在python中使用bs4搜索多个标签,其中之一需要一个属性?
例如,要搜索具有属性的一个标签的所有出现,我知道我可以这样做:
tr_list = soup_object.find_all('tr', id=True)
而且我知道我也可以这样做:
tag_list = soup_object.find_all(['a', 'b', 'p', 'li'])
但是我无法弄清楚如何组合这两个语句,从理论上讲,这将按出现所有这些html标记的顺序为我提供一个列表,每个“ tr”标记都有一个ID。
html片段如下所示:
<tr id="uniqueID">
<td nowrap="" valign="baseline" width="8%">
<b>
A_time_as_text
</b>
</td>
<td class="storyTitle">
<a href="a_link.com" target="_new">
some_text
</a>
<b>
a_headline_as_text
</b>
a_number_as_text
</td>
</tr>
<tr>
<td>
<br/>
</td>
<td class="st-Art">
<ul>
<li>
more_text_text_text
<strong>
more_text_text_text
<font color="228822">
more_text_text_text
</font>
</strong>
more_text_text_text
</li>
<li>
more_text_text_text
<ul>
<li>
more_text_text_text
</li>
</ul>
</li>
</ul>
</td>
</tr>
<tr>
</tr>
Run Code Online (Sandbox Code Playgroud)
预先感谢所有帮助!
我创建了一个刮刀来从网页上获取一些产品名称.它运作顺利.我已经使用CSS选择器来完成这项工作.然而,我唯一无法理解的是选择器之间的区别(a::text
并且a ::text
不要忽略后者之间a
和::text
后者之间的空间).当我运行我的脚本时,无论选择哪个选择器,我都会得到相同的结果.
import requests
from scrapy import Selector
res = requests.get("https://www.kipling.com/uk-en/sale/type/all-sale/?limit=all#")
sel = Selector(res)
for item in sel.css(".product-list-product-wrapper"):
title = item.css(".product-name a::text").extract_first().strip()
title_ano = item.css(".product-name a ::text").extract_first().strip()
print("Name: {}\nName_ano: {}\n".format(title,title_ano))
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,title
并且title_ano
包含相同的选择,扎在后者的空间.然而,结果总是一样的.
我的问题:两者之间是否存在实质性差异,何时使用前者和后者?
我已经使用 selenium 在 python 中编写了一些脚本来从 redmart 网站上抓取不同产品的名称和价格。我的爬虫点击一个链接,转到它的目标页面,从那里解析数据。但是,我在使用此爬网程序时面临的问题是,由于网页的加载速度较慢,它从页面中抓取的项目很少。如何从控制延迟加载过程的每个页面获取所有数据?我尝试使用“执行脚本”方法,但我做错了。这是我正在尝试的脚本:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://redmart.com/bakery")
wait = WebDriverWait(driver, 10)
counter = 0
while True:
try:
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "li.image-facets-pill")))
driver.find_elements_by_css_selector('img.image-facets-pill-image')[counter].click()
counter += 1
except IndexError:
break
# driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
for elems in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.productPreview"))):
name = elems.find_element_by_css_selector('h4[title] a').text
price = elems.find_element_by_css_selector('span[class^="ProductPrice__"]').text
print(name, price)
driver.back()
driver.quit()
Run Code Online (Sandbox Code Playgroud) I'm pretty much brand new to Python, but I'm looking to build a webscraping tool that will rip data from an HTML table online and print it into a CSV in the same format.
Here's a sample of the HTML table (it's enormous, so I'm going to provide only a few rows).
<div class="col-xs-12 tab-content">
<div id="historical-data" class="tab-pane active">
<div class="tab-header">
<h2 class="pull-left bottom-margin-2x">Historical data for Bitcoin</h2>
<div class="clear"></div>
<div class="row">
<div class="col-md-12">
<div class="pull-left">
<small>Currency in USD</small>
</div>
<div …
Run Code Online (Sandbox Code Playgroud) 我已经编写了一个脚本,python
用于pytesseract
从图像中提取一个单词.该图像中只有一个单词TOOLS
,这就是我所追求的.目前我的下面的脚本给了我错误的输出WIS
.我该怎么做才能得到文字?
这是我的脚本:
import requests, io, pytesseract
from PIL import Image
response = requests.get('http://facweb.cs.depaul.edu/sgrais/images/Type/Tools.jpg')
img = Image.open(io.BytesIO(response.content))
img = img.resize([100,100], Image.ANTIALIAS)
img = img.convert('L')
img = img.point(lambda x: 0 if x < 170 else 255)
imagetext = pytesseract.image_to_string(img)
print(imagetext)
# img.show()
Run Code Online (Sandbox Code Playgroud)
这是我运行上述脚本时修改后的图像的状态:
我输出的输出:
WIS
Run Code Online (Sandbox Code Playgroud)
预期产量:
TOOLS
Run Code Online (Sandbox Code Playgroud) python web-scraping python-imaging-library python-3.x python-tesseract
如何使用excel公式拆分由空格分隔的大字符串的倒数第二部分?
具体来说:如果我考虑下面的字符串,那么我希望得到它的第二部分TX
.
这是我希望获得倒数第二部分的字符串:
OWNER 915 BROADWAY ST HOUSTON TX 77012-2126
当我尝试时(考虑到字符串在范围("B1")并且我希望得到范围("B1")中的最后一部分:
=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",LEN(A1))),LEN(A1)))
我得到字符串最后一部分的结果:
77012-2126
但是,当提到第二部分时,我被卡住了.
预期产量:
TX
任何有关这方面的帮助将受到高度赞赏.
Post Script:我不是在解决任何有关vba的问题.
我用 python 编写了一个脚本来执行谷歌搜索并获取结果。目前工作正常。然而,我面临的唯一问题是,我得到的大部分结果都是我的母语,而不是英语,而当我在谷歌浏览器中执行相同的搜索时,我得到的是英语结果。
我如何修改我的脚本以获得所有英文搜索结果?
这是我到目前为止的尝试:
from bs4 import BeautifulSoup
import requests
link = "http://www.google.com/search?q={}"
def fetch_results(query):
res = requests.get(link.format(query.replace(" ","+")))
soup = BeautifulSoup(res.text,"lxml")
for item in soup.select("span"):
print(item.get_text())
if __name__ == '__main__':
fetch_results('india')
Run Code Online (Sandbox Code Playgroud) Node 新手,所以这可能是一个对 Node 理解不够好的问题,但基本上我正在尝试使用 Puppeteer 来抓取页面上的标题列表。当我在 Chrome 控制台中运行查询时,我会得到一个标题列表。哇!
\n\nArray.from(document.querySelectorAll(\'div.description h3.title\')).map(partner => partner.innerText)\n\n(12)\xc2\xa0["Jellyfish", "MightyHive", "Adswerve", "55 | fifty-five", "E-Nor", "LiveArea", "Merkle Inc.", "Publicis Sapient", "Acceleration Precision", "Resolute Digital", "PMG", "Kepler Group"]\n
Run Code Online (Sandbox Code Playgroud)\n\n但是当我使用 Node.js 在 VS Code 中测试它时,我得到一个空数组
\n\nconst browser = await puppeteer.launch();\n const page = await browser.newPage();\n const url =\n "https://marketingplatform.google.com/about/partners/find-a-partner?utm_source=marketingplatform.google.com&utm_medium=et&utm_campaign=marketingplatform.google.com%2Fabout%2F";\n await page.goto(url);\n\n const titles = await page.evaluate(() => \n Array.from(document.querySelectorAll("h3.title"))\n .map(partner => partner.innerText.trim())\n )\n\n$ Node google-test.js\n[]\n
Run Code Online (Sandbox Code Playgroud)\n\n我已经尝试进一步指定选择器,甚至使用检查“复制选择器”快捷方式进行精确选择,但仍然得到一个空数组。
\n\n如果我更模糊,例如选择“h2”,我会得到一个结果,但一旦我进一步指定,它对我来说就结束了。是什么赋予了?
\npython ×8
web-scraping ×8
python-3.x ×6
selenium ×3
html ×2
csv ×1
excel ×1
javascript ×1
node.js ×1
puppeteer ×1
scrapy ×1
string ×1