Python和BeautifulSoup打开页面

时间:2015-09-24 05:50:20

标签: python web-scraping beautifulsoup

我想知道如何在BeautifulSoup的列表中打开另一个页面?我已关注this tutorial,但它没有告诉我们如何打开列表中的其他页面。另外,我将如何打开一个" a href"是嵌套在类中的吗?

这是我的代码:

# coding: utf-8

import requests
from bs4 import BeautifulSoup

r = requests.get("")
soup = BeautifulSoup(r.content)
soup.find_all("a")

for link in soup.find_all("a"):
    print link.get("href")

    for link in soup.find_all("a"):
        print link.text

    for link in soup.find_all("a"):
        print link.text, link.get("href")

    g_data = soup.find_all("div", {"class":"listing__left-column"})

    for item in g_data:
        print item.contents

    for item in g_data:
        print item.contents[0].text
        print link.get('href')

    for item in g_data:
        print item.contents[0]

我正在尝试从每个商家的标题中收集href,然后打开它们并抓取这些数据。

2 个答案:

答案 0 :(得分:2)

我仍然不确定您从哪里获取HTML,但如果您尝试提取所有href标记,则以下方法应根据您发布的图像进行操作:

import requests
from bs4 import BeautifulSoup

r = requests.get("<add your URL here>")
soup = BeautifulSoup(r.content)

for a_tag in soup.find_all('a', class_='listing-name', href=True):
    print 'href: ', a_tag['href']

为了警告您,您可能会发现一些网站会在一两次尝试后将您锁定,因为他们能够检测到您尝试通过脚本而非人类访问网站。如果您认为自己没有得到正确的回复,我建议您打印回来的HTML,以确保它仍然如您所愿。

如果您想获取每个链接的HTML,可以使用以下内容:

import requests
from bs4 import BeautifulSoup

# Configure this to be your first request URL
r = requests.get("http://www.mywebsite.com/search/")
soup = BeautifulSoup(r.content)

for a_tag in soup.find_all('a', class_='listing-name', href=True):
    print 'href: ', a_tag['href']

# Configure this to the root of the above website, e.g. 'http://www.mywebsite.com'
base_url = "http://www.mywebsite.com"

for a_tag in soup.find_all('a', class_='listing-name', href=True):
    print '-' * 60      # Add a line of dashes
    print 'href: ', a_tag['href']
    request_href = requests.get(base_url + a_tag['href'])
    print request_href.content

答案 1 :(得分:1)

  1. 我遇到了同样的问题,我想分享我的发现,因为我确实尝试过这个答案,但由于某些原因它不起作用,但经过一些研究,我发现了一些有趣的东西。

  2. 您可能需要找到“href”链接本身的属性: 在您的案例中,您将需要包含 href 链接的确切 class,我在想="class":"listing__left-column" 并将其等同于一个变量,例如“全部”例如:

<块引用>
from bs4 import BeautifulSoup
all = soup.find_all("div", {"class":"listing__left-column"})
for item in all:
  for link in item.find_all("a"):
    if 'href' in link.attrs:
        a = link.attrs['href']
        print(a)
        print("")

我这样做了,我能够进入嵌入在主页中的另一个链接