我希望能够访问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())
然后查看它生成的文档。但是,在它生成的文档中,我没有看到搜索结果中的配方的任何链接。
有人可以告诉我页面上发生了什么,以及我如何能够收集搜索结果中的链接?
答案 0 :(得分:2)
在浏览器开发者工具中打开HTML,并检查链接配方的锚点。你会发现:
items: [{
xtype: 'textfield',
flex: 1,
listeners: {
focus( a, event, eOpts ){
alert("onFocus");
}
},
}, {
xtype: 'splitter'
}, {
xtype: 'textfield',
flex: 1
}, {
xtype: 'splitter'
}, {
xtype: 'textfield',
flex: 1
}]
Javascript不用于这些结果。这里有一些基本的Python3,可以使用Requests和BeautifulSoup获取所有食谱的链接:
<a href="/recipes/food/views/easter-bread-395055" class="recipeLnk">Easter Bread</a>
输出:
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'])
答案 1 :(得分:0)
有一个名为wget的便捷命令行工具
wget http://www.epicurious.com/tools/searchresults?search=banana
这会将页面下载到文件(与View Page Source相同)。如果你把那个文件拿出来并把它管成一个grep,比如说......'Banana Pudding'
searchresults?search=banana <-- file generated from wget command above
cat searchresults?search=banana | grep 'Banana Pudding'
其中一场比赛是一条线
<a href="/recipes/food/views/banana-pudding-356830" class="recipeLnk">Banana Pudding</a>
然后将其与原始网址一起使用,以制定指向食谱的链接:
http://www.epicurious.com +
/recipes/food/views/banana-pudding-356830
http://www.epicurious.com/recipes/food/views/banana-pudding-356830
底部链接为您提供食谱!现在只需手动自动化我们在这里做的事情