我收到空的导出文件、scrapy、剧作家、XHR 请求
im getting empty exported file, scrapy, playwright, XHR requests
我对 scrapy 和 python 很陌生。所以这周我试图从网页上抓取 XHR 请求,但我不知道为什么我每次都得到空导出,
这是这篇文章:(顺便说一句,谢谢你的精彩文章)
https://www.zenrows.com/blog/web-scraping-intercepting-xhr-requests#use-case-auctioncom
导入scrapy
从 playwright.sync_api 导入 sync_playwright
class GavSpider(scrapy.Spider):
姓名 = 'gav'
url = "https://www.g2g.com/categories/wow-classic-tbc-gold-for-sale?region_id=ac3f85c1-7562-437e-b125-e89576b9a38e"
与 sync_playwright() 作为 p:
def handle_response(响应):
# 我们感兴趣的端点
如果(response.url 中的“/搜索?”):
items = response.json()["payload"]["results"]
[print(item["title"], item["display_price"]) for item in items]
browser = p.chromium.launch()
page = browser.new_page()
page.on("response", handle_response)
page.goto(url, wait_until="networkidle")
page.context.close()
browser.close()
顺便说一句,我可以完美地抓取它,它只是导出结果。
如果你能给我一些基本的技巧、线索或任何能让我在 xhr 抓取和导出数据方面做得更好的东西,我将不胜感激。
存储抓取结果以将其导出为 CSV 的简单方法。我修改了您的代码,它会将结果项保存在“data.csv”文件中。
根据这个想法,您可以随心所欲地扩大规模。抓取不同的页面并附加到项目数组。或者使用“to_sql”代替“to_csv”将其存储在数据库中。
from playwright.sync_api import sync_playwright
import pandas as pd
url = "https://www.g2g.com/categories/wow-classic-tbc-gold-for-sale?region_id=ac3f85c1-7562-437e-b125-e89576b9a38e"
def store_data(items):
data = pd.DataFrame(items)
data.to_csv("data.csv", index=False)
with sync_playwright() as p:
def handle_response(response): # the endpoint we are insterested in
if ("/search?" in response.url):
items = response.json()["payload"]["results"]
store_data(items)
# [print(item["title"], item["display_price"]) for item in items]
browser = p.chromium.launch()
page = browser.new_page()
page.on("response", handle_response)
page.goto(url, wait_until="networkidle")
page.context.close()
browser.close()
我 运行 上面的脚本原样是 data in CSV.
中的结果
PS 很高兴你喜欢这篇文章,我写了它 ;)
我对 scrapy 和 python 很陌生。所以这周我试图从网页上抓取 XHR 请求,但我不知道为什么我每次都得到空导出, 这是这篇文章:(顺便说一句,谢谢你的精彩文章) https://www.zenrows.com/blog/web-scraping-intercepting-xhr-requests#use-case-auctioncom
导入scrapy 从 playwright.sync_api 导入 sync_playwright
class GavSpider(scrapy.Spider): 姓名 = 'gav'
url = "https://www.g2g.com/categories/wow-classic-tbc-gold-for-sale?region_id=ac3f85c1-7562-437e-b125-e89576b9a38e"
与 sync_playwright() 作为 p: def handle_response(响应): # 我们感兴趣的端点 如果(response.url 中的“/搜索?”): items = response.json()["payload"]["results"] [print(item["title"], item["display_price"]) for item in items]
browser = p.chromium.launch()
page = browser.new_page()
page.on("response", handle_response)
page.goto(url, wait_until="networkidle")
page.context.close()
browser.close()
顺便说一句,我可以完美地抓取它,它只是导出结果。 如果你能给我一些基本的技巧、线索或任何能让我在 xhr 抓取和导出数据方面做得更好的东西,我将不胜感激。
存储抓取结果以将其导出为 CSV 的简单方法。我修改了您的代码,它会将结果项保存在“data.csv”文件中。
根据这个想法,您可以随心所欲地扩大规模。抓取不同的页面并附加到项目数组。或者使用“to_sql”代替“to_csv”将其存储在数据库中。
from playwright.sync_api import sync_playwright
import pandas as pd
url = "https://www.g2g.com/categories/wow-classic-tbc-gold-for-sale?region_id=ac3f85c1-7562-437e-b125-e89576b9a38e"
def store_data(items):
data = pd.DataFrame(items)
data.to_csv("data.csv", index=False)
with sync_playwright() as p:
def handle_response(response): # the endpoint we are insterested in
if ("/search?" in response.url):
items = response.json()["payload"]["results"]
store_data(items)
# [print(item["title"], item["display_price"]) for item in items]
browser = p.chromium.launch()
page = browser.new_page()
page.on("response", handle_response)
page.goto(url, wait_until="networkidle")
page.context.close()
browser.close()
我 运行 上面的脚本原样是 data in CSV.
中的结果PS 很高兴你喜欢这篇文章,我写了它 ;)