Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有beautifulsoup的xpath循环页面_Python_Pandas_Selenium_Xpath_Beautifulsoup - Fatal编程技术网

Python 带有beautifulsoup的xpath循环页面

Python 带有beautifulsoup的xpath循环页面,python,pandas,selenium,xpath,beautifulsoup,Python,Pandas,Selenium,Xpath,Beautifulsoup,这可能是一个问题中的几个问题,但是如何帮助我的人可能会回答所有问题,所以我把它作为一个问题来写 所以,我想获得不同产品的数据 每个产品都有几个我想收集的数据点 每页上列出了30种产品 有数百页 我正在使用xpath获取数据,但我知道将beautifulSoup与xpath一起使用可能会很复杂 问题: 当我使用xPath时,我不明白如何在我的示例中使用beautifulsoup 我曾尝试使用for循环来循环页面,效果很好。然后,我添加了带有foundTitles.append([title.

这可能是一个问题中的几个问题,但是如何帮助我的人可能会回答所有问题,所以我把它作为一个问题来写

所以,我想获得不同产品的数据

  • 每个产品都有几个我想收集的数据点
  • 每页上列出了30种产品
  • 有数百页
我正在使用xpath获取数据,但我知道将beautifulSoup与xpath一起使用可能会很复杂

问题:

  • 当我使用xPath时,我不明白如何在我的示例中使用beautifulsoup
  • 我曾尝试使用for循环来循环页面,效果很好。然后,我添加了带有foundTitles.append([title.text])的元素,但随后数据框架无法工作。可能是因为我不明白如何将新格式放入数据帧
代码:


实际上,您不需要selenium甚至beautifulsoup,所有内容都是通过
xhr
请求加载的,而不需要javascript,正如您在浏览器开发人员工具的网络选项卡上看到的,即:

import requests

h = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',
    'X-Requested-With': 'XMLHttpRequest',
}

u = "https://www.systembolaget.se/api/productsearch/search/sok-dryck/?searchquery=land&sortdirection=Ascending&site=all&fullassortment=1"

req = requests.get(u,headers=h).json()

for prod in req['ProductSearchResults']:
    ProductId = prod['ProductId']
    ProductNumber = prod['ProductNumber']
    ProductNameBold = prod['ProductNameBold']
    ProductNameThin = prod['ProductNameThin']
    Volume = prod['Volume']
    Price = prod['Price']
    Category = prod['Category']
    ProductNumberShort = prod['ProductNumberShort']
    TasteAndUsage = prod['TasteAndUsage']
    #...  and many other product details
    print(ProductNumber, ProductNameBold)


要检索一个或多个产品的详细信息,可以发出以下请求:

u = "https://www.systembolaget.se/api/product/GetProductsForAnalytics"
d = {"ProductNumbers":["2048801"]} # use the ProductNumber(s) gattered above
prod_detail = requests.post(u, json=d, headers=h).json()
print(prod_detail)


{'Products':[{'ProductId':'303987','ProductNumberShort':'20488','schodment':'FS','CustomerOrderSupplySource':'depot','SupplyCode':无,'IsNewVintage':False,'OriginLevel1':'Skottland','OriginLevel2':'Highlands','OriginLevel3':'Western Highlands','OriginLevel4':无,'OriginLevel5':无,'BrandOrigin','None','Bottl','eTypeGroup':'Helflaska glas','IsWebLaunch':False,'Seal':'Skruvkapsyl','VatCode':1,'PriceIncluveExclucRecycleFee':1499.0,'PriorPrice':0.0,'ComparisonPrice':2141.43,'SellStartDate':'2008-04-01T00:00:00,'SellStartTime':'10:00,'BottleTypes':无,'IssellStartDate突出显示:False,'SellStartSearchUrl':'/sok dryck/?sellstartdatefrom=2008-04-01和sellstartdatefrom=2008-04-01,“ProducerName”:朗格兄弟有限公司,“ProducerDescription”:Familjen Edmonstone erhöll licens att destillera 1833。1851年,在namnet Burnfoot的领导下,直到Maclelean和som säljer det,直到朗格兄弟1876年,在namnet Glen Guin领导下。\n1905年ella namnet Glengoyne.1965年,罗伯逊和巴克斯特集团的blir Langs,som senare blir Edrington.2003年,köper företaget Ian Macleod&Co.Destinlleriet och varumärket Langs.Samtidget byter man namn till Ian Macleod Dillers.,“TasteAndUsage”:“康普莱、斯玛克里克威士忌med tydlig karaktäav sherryfat、inslag av valnötter、torkad frukt、kakao,lakrits och honung.Servers rumstempererad som avec.,“生产”:无,“种植区”:格伦戈因·利格尔(Glengoyne ligger i Western Highlands,alltsåde västra delarna av Skottland.Gränsen föräknas som räknas直到诺拉och västra högl derna brukar gåvid som ligger i nordv vävänigän räknat fr Staden Inverness.,”收获:无,'土壤':无,'供应商名称':'Cask Sweden AB','IsManufacturingCountry':真,'IsSupplierTemporaryNotAvailable':假,'IsSupplierNotAvailable':假,'BackInStockAtSupplier':无,'IsDiscontinued':假,'IsCompletellyAutotofstock':假,'IsTemporaryOuttofStock':假,'限制数量:0,'IsRegionalRestricted':False,'IsNewInAssortment':False,'IsLimitedEdition':False,'IsFSscholding':True,'IstseSassorrtment':False,'IsHidden':False,'IsInAsnyStoreSearchScholding':True,'IsStoreOrderApplied':True,'IsHomeOrderApplied':True,'IsAgentOrderApplied':True,'sSeasonName':无,'IsIsIsIsIsMatchable':False,'IsDKI':False,'AllergonStatement':'Inga过敏原','IngredientStatement':无,'AlcoholPercentage':43.0,'TasteSymbols':'Avec/digestif;','TasteClockGroup':'Ingen rökighet','TasteClockPitter':无,'TasteClockFroothAcid':无,'TasteClockBody','TasteClockBody':无,'TasteClockSweetness':8,“口味巧克力烟熏”:1,“IsCategoryBeer”:False,“IsCategoryBeerOrWhisky”:False,“IsNewsIconVisible”:False,“Grapes”:None,“RawMaterial”:“Mältat korn av typen golden promise.”,“SugarContent”:“看起来你正在处理,请回答你的问题,并包含所需输出的样本,而不是手动检查长代码。我同意你的建议。”ee,在这个例子中,它可以用更少的变量来缩短。但是我不认为样本输出一定会更清晰或更具描述性。我在开始时试图在项目符号列表中描述,我试图从每个产品中获取不同的数据点,并且产品在每个页面上的列表中都是结构化的,然后有每个页面。我更喜欢CSV中的输出,其中每个产品都是一行,每个属性都是一列。这清楚了吗?还是您希望我用一些示例行在excel中手动创建一个输出文件?您可以在开发者工具控制台上根据
xhr
请求的响应分析
json
对象,但我不这样做ally将其复制到以便更好地阅读。我从xhr响应中获得了元素名称。@Patric,它用于chrome,但可以在任何现代浏览器上使用。通过在网站上导航并在浏览器开发人员控制台的“网络”选项卡上监视xhr请求。重新发布相同的链接:谢谢。我刚刚解决了它。有两种方法可以查看pageto=3和pageto=3。“pageto”将所有页面相加,但将响应限制为300个对象。“pageto”仅响应30个对象,但在它停止之前,您可以到达pageto=332,这意味着如果您循环它,您将总共获得近10.000个响应
9001001 Evening Land Vineyard Seven Springs
7233401 Seven Springs
694701 Tyrrell's Wines
57801 Barceló
53701 Highland Queen
57802 Barceló
...
u = "https://www.systembolaget.se/api/product/GetProductsForAnalytics"
d = {"ProductNumbers":["2048801"]} # use the ProductNumber(s) gattered above
prod_detail = requests.post(u, json=d, headers=h).json()
print(prod_detail)
{'Products': [{'ProductId': '303987', 'ProductNumberShort': '20488', 'Assortment': 'FS', 'CustomerOrderSupplySource': 'depot', 'SupplyCode': None, 'IsNewVintage': False, 'OriginLevel1': 'Skottland', 'OriginLevel2': 'Highlands', 'OriginLevel3': 'Western Highlands', 'OriginLevel4': None, 'OriginLevel5': None, 'BrandOrigin': None, 'BottleCode': 'Helbutelj', 'BottleTypeGroup': 'Helflaska glas', 'IsWebLaunch': False, 'Seal': 'Skruvkapsyl', 'VatCode': 1, 'PriceExclVat': 1199.2, 'PriceInclVatExclRecycleFee': 1499.0, 'PriorPrice': 0.0, 'ComparisonPrice': 2141.43, 'SellStartDate': '2008-04-01T00:00:00', 'SellStartTime': '10:00:00', 'BottleTypes': None, 'IsSellStartDateHighlighted': False, 'SellStartSearchUrl': '/sok-dryck/?sellstartdatefrom=2008-04-01&sellstartdateto=2008-04-01', 'ProducerName': 'Lang Brothers Limited', 'ProducerDescription': 'Familjen Edmonstone erhöll licens att destillera 1833. 1851 såldes destilleriet, under namnet Burnfoot, till MacLelleand som säljer det till Lang Brothers 1876, då under namnet Glen Guin. \n1905 blir det officiella namnet Glengoyne. 1965 blir Langs en del av Robertson & Baxter Group, som senare blir Edrington. 2003 köper företaget Ian Macleod & Co. destilleriet och varumärket Langs. Samtidigt byter man namn till Ian Macleod Distillers.', 'TasteAndUsage': 'Komplex, smakrik whisky med tydlig karaktär av sherryfat, inslag av valnötter, torkad frukt, kakao, lakrits och honung. Serveras rumstempererad som avec.', 'Production': None, 'CultivationArea': 'Glengoyne ligger i Western Highlands, alltså de västra delarna av Skottland. Gränsen för vad som räknas till de norra och västra högländerna brukar gå vid destillerier som ligger i nordvästlig riktning räknat från Staden Inverness.', 'Harvest': None, 'Soil': None, 'SupplierName': 'Cask Sweden AB', 'IsManufacturingCountry': True, 'IsSupplierTemporaryNotAvailable': False, 'IsSupplierNotAvailable': False, 'BackInStockAtSupplier': None, 'IsDiscontinued': False, 'IsCompletelyOutOfStock': False, 'IsTemporaryOutOfStock': False, 'RestrictedParcelQuantity': 0, 'IsRegionalRestricted': False, 'IsNewInAssortment': False, 'IsLimitedEdition': False, 'IsFsAssortment': True, 'IsTseAssortment': False, 'IsTsLsAssortment': False, 'IsHidden': False, 'IsSearchable': True, 'IsInAnyStoreSearchAssortment': True, 'IsStoreOrderApplicable': True, 'IsHomeOrderApplicable': True, 'IsAgentOrderApplicable': True, 'SeasonName': None, 'IsDishMatchable': False, 'IsDKI': False, 'AllergenStatement': 'Inga Allergener', 'IngredientStatement': None, 'AlcoholPercentage': 43.0, 'TasteSymbols': 'Avec/digestif;', 'TasteClockGroup': 'Ingen rökighet', 'TasteClockBitter': None, 'TasteClockFruitacid': None, 'TasteClockBody': None, 'TasteClockRoughness': None, 'TasteClockSweetness': None, 'TasteClockCasque': 8, 'TasteClockSmokiness': 1, 'IsCategoryBeer': False, 'IsCategoryBeerOrWhiskey': False, 'IsNewsIconVisible': False, 'Grapes': None, 'RawMaterial': 'Mältat korn av typen golden promise.', 'SugarContent': '<3', 'Additives': None, 'Storage': None, 'Preservable': '', 'HasInbounddeliveries': False, 'IsGlutenFree': False, 'IsEthical': False, 'EthicalLabel': None, 'IsKosher': False, 'Created': '2014-04-23T10:47:03', 'Modified': '2020-04-24T02:09:06', 'ShowAdditionalBottleTypes': False, 'OriginLevels': ['Skottland', 'Highlands', 'Western Highlands'], 'TasteSymbolsList': ['Avec/digestif'], 'IsTasteAndUsageAlone': True, 'ImageItem': [{'ImageUrl': 'https://static.systembolaget.se/imagelibrary/publishedmedia/rdxofqidiov294hwwqxz/303987.jpg', 'ImageAltAttribute': '303987'}], 'WebLaunch': None, 'ProductNutritionHeaders': [], 'HasProductImage': True, 'HasAnyTaste': True, 'HasSymbolsOrRecycleFee': False, 'HasTasteAndRestrictions': False, 'HasRestrictions': False, 'HasSymbols': False, 'HasAnyTasteClocks': True, 'HasAnyTasteSymbols': True, 'ProductNumber': '2048801', 'ProductNameBold': 'Glengoyne', 'ProductNameThin': '21 Years', 'PriceInclVat': 1499.0, 'IsOrganic': False, 'IsLightWeightBottle': False, 'Volume': 700.0, 'Vintage': 0, 'Country': 'Storbritannien', 'Category': 'Sprit', 'SubCategory': 'Whisky', 'Type': 'Maltwhisky', 'Style': None, 'BeverageDescriptionShort': 'Maltwhisky', 'StyleDescription': None, 'RecycleFee': 0.0, 'RecycleFeeIndicator': '', 'BottleTextShort': 'Flaska', 'IsAddableToBasket': True, 'IsFsTsAssortment': True, 'IsBSAssortment': False, 'IsPaAssortment': False, 'ShowAdditionalBsInformation': False, 'Usage': 'Serveras rumstempererad som avec.', 'Color': 'Brungul färg.', 'Aroma': 'Komplex, harmonisk doft med tydlig karaktär av sherryfat, inslag av torkad frukt, valnötter, lakritsfudge, pomerans och mörk choklad.', 'Taste': 'Komplex, smakrik whisky med tydlig karaktär av sherryfat, inslag av valnötter, torkad frukt, kakao, lakrits och honung.', 'AdditionalInformation': "Avec är drycker som konsumeras efter middagen till kaffet. Vanliga exempel på avec är whisky, cognac, mörk rom eller likörer. Ordet är franskt, betyder 'med' och är en kortform av uttrycket 'du café avec le petit verre' som betyder kaffe med det lilla glaset.  "}], 'StockBalances': []}