首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何抓取数据帧中列中的所有url

如何抓取数据帧中列中的所有url
EN

Stack Overflow用户
提问于 2019-06-13 04:16:52
回答 2查看 433关注 0票数 0

很抱歉这个问题,但是我是python的新手,这个问题对我来说非常困难。

我正在做这个csv (https://www.kaggle.com/jtrofe/beer-recipes),我需要做抓取。

问题是,在数据帧的列(URL)中有一个链接的一部分,并且没有声明主要部分(https://www.brewersfriend.com)。我想从每个网址抓取各种啤酒的评级。

对我来说,这非常复杂。

我希望有人能帮助我!非常感谢。

EN

回答 2

Stack Overflow用户

发布于 2019-06-13 04:39:40

看起来在https://www.kaggle.com/jtrofe/beer-recipes上的数据快照中有一个url。你想要抓取的实际url是https://www.brewersfriend.com/。然后,对于每一行,您将附加来自数据集的url。

例如,第一个要抓取的是:https://www.brewersfriend.com/homebrew/recipe/view/1633/vanilla-cream-ale

为了解决这个问题,你可以做一些简单的事情,比如:

代码语言:javascript
复制
from urllib.request import urlopen
url='https://www.brewersfriend.com/homebrew/recipe/view/1633/vanilla-cream-ale'
html = urlopen(url)
print(html.read())
#Then extract the rating from the html

唯一的问题是,当我尝试抓取它时,我得到了一个403禁止的错误...但这将是另一个问题。

一旦你得到了抓取工作,你就可以遍历每个数据点并抓取评级。希望这能帮助你开始行动起来!

票数 0
EN

Stack Overflow用户

发布于 2019-06-13 12:28:55

您可以模仿页面执行的POST请求来添加其他行,并改为更改records to be returned参数以检索总行数。您可以从原始页面中抓取总数,也可以对其进行硬编码(假设它是一个固定的数据集)。您可以解析为整个数据集的所有链接返回的json,并简单地将域和协议连接到相对的url,如下所示。

请务必检查有关使用此端点/抓取的T&C。

代码语言:javascript
复制
import requests, re

p = re.compile(r'dataviewToken":"(.*?)"')
p1 = re.compile(r'"rowCount":(\d+)')

with requests.Session() as s:
    r = s.get('https://www.kaggle.com/jtrofe/beer-recipes')   
    token = p.findall(r.text)[0]
    rows = int(p1.findall(r.text)[0])
    data = {"jwe":{"encryptedToken": token},"source":{"type":3,"dataset":{"url":"jtrofe/beer-recipes","tableType":1,"csv":{"fileName":"recipeData.csv","delimiter":",","headerRows":1}}},"select":["BeerID","Name","URL","Style","StyleID","Size(L)","OG","FG","ABV","IBU","Color","BoilSize","BoilTime","BoilGravity","Efficiency","MashThickness","SugarScale","BrewMethod","PitchRate","PrimaryTemp"],"skip":0,"take": rows}
    base = 'https://www.brewersfriend.com'
    r = s.post('https://www.kaggleusercontent.com/services/datasets/kaggle.dataview.v1.DataViewer/GetDataView', json = data).json()
    links = [base + row['text'][2] for row in r['dataView']['rows']]]['rows']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56569773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档