
[英]Visual Studio Code only runs python scripts in debugging mode
[英]Beautifulsoup - Python For loop only runs 8 times then exits with code 0 in visual studio code
提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文。
我有一个 python 脚本,可以抓取拍卖网站的第一页。 它正在抓取的页面是 trademe.co.nz - 类似于 ebay/amazon 等。它的目的是抓取第一页上的所有列表 - 只有当它不在我的数据库中时。 它按预期工作,但有一个警告 - 它只抓取前 8 个列表(不管 trademe url)然后在 visual studio 代码中以代码 0 退出。 如果我尝试再次运行它,它会立即退出,因为它认为没有新的拍卖 ID。 如果添加了新列表并且我再次运行脚本 - 它会添加新列表。
from bs4 import BeautifulSoup
from time import sleep
import requests
import datetime
import sqlite3
# Standard for all scrapings
dateAdded = datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S")
def mechanicalKeyboards():
url = "https://www.trademe.co.nz/a/marketplace/computers/peripherals/keyboards/mechanical/search?condition=used&sort_order=expirydesc"
category = "Mechanical Keyboards"
dateAdded = datetime.datetime.now().strftime("%d/%m/%Y %H:%M:%S")
trademeLogo = "https://www.trademe.co.nz/images/frend/trademe-logo-no-tagline.png"
# getCode = requests.get(url).status_code
# print(getCode)
r = requests.get(url)
soup = BeautifulSoup(r.text, "html.parser")
listingContainer = soup.select(".tm-marketplace-search-card__wrapper")
conn = sqlite3.connect('trademe.db')
c = conn.cursor()
c.execute('''SELECT ID FROM trademe ORDER BY DateAdded DESC ''')
allResult = str(c.fetchall())
for listing in listingContainer:
title = listing.select("#-title")
location = listing.select("#-region")
auctionID = listing['data-aria-id'].split("-").pop()
fullListingURL = "https://www.trademe.co.nz/a/" + auctionID
image = listing.select("picture img")
try:
buyNow = listing.select(".tm-marketplace-search-card__footer-pricing-row")[0].find(class_="tm-marketplace-search-card__price ng-star-inserted").text.strip()
except:
buyNow = "None"
try:
price = listing.select(".tm-marketplace-search-card__footer-pricing-row")[0].find(class_="tm-marketplace-search-card__price").text.strip()
except:
price = "None"
for t, l, i in zip(title, location, image):
if auctionID not in allResult:
print("Adding new data - " + t.text)
c.execute(''' INSERT INTO trademe VALUES(?,?,?,?)''', (auctionID, t.text, dateAdded, fullListingURL))
conn.commit()
sleep(5)
我想也许我受到了速率限制,但我得到了 200 状态代码并且更改 URL 再次适用于前 8 个列表。 我查看了元素,但在第 8 次上市后看不到任何变化。 我希望有人能提供帮助,非常感谢。
当使用requests.get(url)
抓取具有延迟加载内容的网站时,它只返回 HTML 和前 8 个列表的图像,导致zip(title, location, image)
function 仅产生 8 个项目,因为image
变量listingContainer
中第 8 个 listing 之后为空列表
要正确抓取此类网站,我建议使用 Playwright 或 Selenium 等工具。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.