gpt4 book ai didi

javascript - 抓取使用 Javascript(可能还有其他东西)的网页时

转载 作者:行者123 更新时间:2023-11-27 23:37:02 26 4
gpt4 key购买 nike

我希望能够访问类似 this search result within a site 的网页并能够收集各种结果的链接。我正在使用 Python 的 urllib.request 和 bs4 进行抓取。但是,尽我所能理解我正在查看的内容,链接位于某种嵌入式 Javascript 对象的内部。

我尝试直接下载该页面的 HTML 源代码以尝试查看它并理解它,但它作为一个包含图片和各种 HTML 文件的整个文件夹下载,我不知道单个网页如何可以是一个文件。但我所做的是以下内容:

import urllib.request as ul
url = 'http://www.epicurious.com/tools/searchresults?search=banana'
source = ul.urlopen(url)
with open('pagesource.html', 'w') as f:
f.write(source.read())

然后查看它生成的文件。但是,在它生成的文档中,我没有在搜索结果中看到任何指向食谱的链接。

任何人都可以告诉我页面中发生了什么,以及我如何能够收集搜索结果中的链接吗?

最佳答案

在浏览器开发者工具中打开 HTML 并检查链接菜谱的 anchor 。你会发现:

<a href="/recipes/food/views/easter-bread-395055" class="recipeLnk">Easter Bread</a>

Javascript 不用于这些结果。下面是一些基本的 Python3,用于使用 Requests 和 BeautifulSoup 获取指向所有食谱的链接:

import requests
from bs4 import BeautifulSoup

URL_EPICURIOUS_SEARCH="http://www.epicurious.com/tools/searchresults?search="
SEARCH_TEXT="banana"

# Run the search and get the HTML result
response = requests.get(URL_EPICURIOUS_SEARCH + SEARCH_TEXT)
if response.status_code != 200:
print("HTTP Status:" + response.status_code)
exit()

soup = BeautifulSoup(response.text, 'html.parser')
# Search for all links with class "recipeLink"
recipes = soup.find_all("a", class_="recipeLnk")

# Loop through the set and print all hrefs.
for recipe in recipes:
if recipe.has_attr('href'):
print(recipe['href'])

输出:

$ python3 recipe-search.py
/recipes/food/views/banana-pudding-356830
/recipes/food/views/banana-bread-51200430
/recipes/food/views/banana-bread-51200020
...

关于javascript - 抓取使用 Javascript(可能还有其他东西)的网页时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33459289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com