gpt4 book ai didi

python - Yelp 的 Python 网络爬虫

转载 作者:太空宇宙 更新时间:2023-11-04 10:38:52 26 4
gpt4 key购买 nike

我一直在尝试为 yelp 编写爬虫。我想获取该页面上提供的供应商的链接,我知道它在 href="中给出,但返回的数组始终为空,请帮忙!提前谢谢你:)

    import urllib
import mechanize
from bs4 import BeautifulSoup
import re

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders= [('User-agent', 'chrome')]

BASE_URL = "http://www.yelp.com/"
regex = "u(?!.*u).*,"
patern =re.compile(regex)

search = "house cleaner"
location ="London, Uk"
term = search.replace(" ","+")
place = location.replace(",","%2C").replace(" ","+")
query = BASE_URL+"search?find_desc="+term+"&find_loc="+place+"&ns=1#start=0"
html = br.open(query).read()
soup = BeautifulSoup(html)
results = soup.findAll('ul',attrs={'class':'ylist ylist-bordered search-results'})
results_parse = str(results)
soup1 = BeautifulSoup(results_parse)
names =soup1.findAll("li")
for li in names:
soup2=BeautifulSoup(str(li))
links=soup2.findAll("a")
links_parse = links[0]
vendor_links=[a["href"] for a in links]
out= re.findall(patern,str(vendor_links))
print out

最佳答案

这是让您的代码按照您的意愿行事的文字问题的解决方案(但请参阅下文了解为什么我认为这不是一个好方法):

import requests                                                             
import lxml.html

BASE_URL = "http://www.yelp.com"
search = "house cleaner"
location ="London, Uk"
term = search.replace(" ","+")
place = location.replace(",","%2C").replace(" ","+")
query = BASE_URL + "/search?find_desc="+term+"&find_loc="+place+"&ns=1#start=0"

html = requests.get(query).content
tree = lxml.html.fromstring(html)
results = tree.xpath("//span[@class='indexed-biz-name']/a[@class='biz-name']/@href")

for result in results:
print BASE_URL + result

如果您进行更多的抓取,我为什么要对您的代码进行各种更改的一些指示:

  • requests 时,mechanize 可能有点太重了,无法处理像这样的简单任务(scrapy 也是如此)。存在并且是一个非常易于使用的库,用于发出 HTTP 请求
  • 使用 XPath 对于提取网页的特定功能非常方便。您可以看到,这确实简化了查找所需元素的过程。

但是,更一般地说,如果我想从网站中提取信息,我会做的第一件事是检查他们是否有 API

Yelp does ,并且我建议您使用它。为什么?

  • 这是一种行为契约;您可以依赖其中记录的任何内容。如果有某种方法可以退出,例如链接到业务页面,它应该保持稳定。抓取他们的网站也不能保证:他们网站的布局可能会改变,这里的代码很可能会崩溃。
  • 这是一种允许您用来获取信息的方法。如果您拥有有效的 API key ,您对 Yelp API 请求的唯一限制是 10,000 calls per day .另一方面,如果您只是像这里那样抓取它们,它们可能会阻止您的 IP 地址以阻止它,尤其是当您发出大量自动页面请求时。

关于python - Yelp 的 Python 网络爬虫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21962537/

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