【问题标题】:Scraping data from a dynamic ecommerce webpage从动态电子商务网站抓取数据
【发布时间】:2014-09-27 23:08:32
【问题描述】:

我正在尝试取消电子商务网站(在本例中为 Flipkart)网页上列出的所有产品的标题。现在,我要抓取的产品将取决于用户输入的关键字。如果我输入产品“XYZXYZ”,生成的典型 URL 是:

http://www.flipkart.com/search?q=XYXXYZ&as=off&as-show=on&otracker=start 

现在,使用此链接作为模板,我编写了以下脚本,根据输入的关键字删除任何给定网页下列出的所有产品的标题:

import requests
from bs4 import BeautifulSoup

def flipp(k):
    url = "http://www.flipkart.com/search?q=" + str(k) + "&as=off&as-show=on&otracker=start"
    ss = requests.get(url)
    src = ss.text
    obj = BeautifulSoup(src)
    for e in obj.findAll("a", {'class' : 'lu-title'}):
        title = e.string
        print unicode(title)

h = raw_input("Enter a keyword:")
print flipp(h)

但是,上面的脚本返回None 作为输出。当我尝试在每一步调试时,我发现requests模块无法获取网页的源代码。这里似乎发生了什么?

【问题讨论】:

  • 您是否发现任何错误?
  • 不,该函数只返回None。

标签: python beautifulsoup python-requests web-mining


【解决方案1】:

这就是诀窍,

import requests
from bs4 import BeautifulSoup
import re

def flipp(k):
    url = "http://www.flipkart.com/search?q=" + str(k) + "&as=off&as-show=on&otracker=start"
    ss = requests.get(url)
    src = ss.text
    obj = BeautifulSoup(src)
    for e in obj.findAll("a",class_=re.compile("-title")):
        title = e.text
        print title.strip()

h = raw_input("Enter a keyword:") # I used 'Python' here
print flipp(h)

Out[1]:
Think Python (English) (Paperback)
Learning Python (English) 5th  Edition (Hardcover)
Python in Easy Steps : Makes Programming Fun ! (English) 1st Edition (Paperback)
Python : The Complete Reference (English) (Paperback)
Natural Language Processing with Python (English) 1st Edition (Paperback)
Head First Programming: A learner's guide to programming using the Python language (English) 1st  Edition (Paperback)
Beginning Python (English) (Paperback)
Programming Python (English) 4Th Edition (Hardcover)
Computer Science with Python Language Made Simple - (Class XI) (English) (Paperback)
HEAD FIRST PYTHON (English) (Paperback)
Raspberry Pi User Guide (English) (Paperback)
Core Python Applications Programming (English) 3rd  Edition (Paperback)
Write Your First Program (English) (Paperback)
Programming Computer Vision with Python (English) 1st Edition (Paperback)
An Introduction to Python (English) (Paperback)
Fundamentals of Python: Data Structures (English) (Paperback)
Think Complexity (English) (Paperback)
Foundations of Python Network Programming: The comprehensive guide to building network applications with Python (English) 2nd Edition (Soft Cover)
Python Programming for the Absolute Beginner (English) (Paperback)
EXPERT PYTHON PROGRAMMING BEST PRACTICES FOR DESIGNING,CODING & DISTRIBUTING YOUR PYTHON 1st Edition (Paperback)
None

【讨论】:

  • 此解决方案也返回 None。另外,我在源代码中找不到任何名为“pu-title”的类。
  • 这段代码非常适合我。那我们就错了。你能告诉我你使用的关键字吗
  • 尝试输入“java”和“python”。脚本返回无。而且我仍然在网页的源代码中找不到任何名为“pu-title”的类。你能解释一下你是如何想出你的 findAll 函数中的参数的吗?
  • 我现在看到了,关键字的变化也改变了类。我做了移动,它有“pu-title”使用python它的lu-title。让我以更好的方式重新发布我的答案,给我几分钟
  • 嗯,这真的太难以想象了。我试图猜测所有可能的原因,但想不出任何原因。我确信代码是正确的。至少一个错误会有所帮助 - 但你说没有错误:-(如果你发现了什么,请告诉我,我很乐意提供帮助
【解决方案2】:

问题在于flipp 没有return 语句,因此您要打印None(这是没有return 语句的任何Python 函数的默认返回值)。

可能是您使用的关键字没有结果,但我使用该脚本返回的页面很好。

【讨论】:

  • 我不认为没有return语句是一个问题。我写了一个类似的爬虫来从亚马逊提取数据,它工作得很好。
  • @ManasChaturvedi 很好,但是在这段代码中,您没有从函数返回任何内容,这就是您收到 None 的原因。我不明白你怎么能声称这不是问题,事实上,这就是你得到None的原因。
  • 考虑到我将“打印标题”替换为“返回标题”,我希望显示该网页上的第一个产品标题,然后终止循环。但是,我的输出中仍然没有。
猜你喜欢
  • 2019-06-21
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2019-09-11
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多