当前位置: 首页 > 知识库问答 >
问题:

使用urllib2和python正确阅读超文本标记语言

蒙胤
2023-03-14

我打开这个链接"http://www.amazon.com/s?rh=n: 1"与urllib2和我试图获取下一页链接(href="/s/ref=lp_1_pg_2?rh=n: 283155, n:!1000, n: 1

共有2个答案

夏侯楷
2023-03-14

尝试

import urllib2
from HTMLParser import HTMLParser

    class MyHTMLParser(HTMLParser):
        href = []
        def handle_starttag(self, tag, attrs):
            if tag == "a":
                for attr in attrs:
                    if attr[0] == "href" and 'page' in attr[1] and 'rh' in attr[1]:
                        self.href.append(attr[1])


    def _get(url):
        response = urllib2.urlopen(url)
        html = response.read()
        parser = MyHTMLParser()
        parser.feed(html.decode('utf-8'))
        href = parser.href
        print href

    _get('http://www.amazon.com/s?rh=n%3A1')
彭宏义
2023-03-14

它这样做是因为你没有标题。我试过:

from mechanize import Browser
from bs4 import BeautifulSoup

browser = Browser()

html_page = browser.open("http://www.amazon.com/s?rh=n%3A1")
soup = BeautifulSoup(html_page)
link = soup.find("a", {"title" : "Next Page"})
print link

输出:

<a title="Next Page" id="pagnNextLink" class="pagnNext" href="/s?rh=n%3A1&amp;page=2">
<span id="pagnNextString">Next Page</span>
<span class="srSprite pagnNextArrow"></span>
</a>

然后我添加了标题:

from mechanize import Browser
from bs4 import BeautifulSoup
browser = Browser()

browser.addheaders = [('User-agent', 'Mozilla/5.0\
    (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko)\
    Chrome/23.0.1271.97 Safari/537.11')]

html_page = browser.open("http://www.amazon.com/s?rh=n%3A1")
soup = BeautifulSoup(html_page)
link = soup.find("a", {"title" : "Next Page"})
print link

输出:

<a title="Next Page" id="pagnNextLink" class="pagnNext" href="/s/ref=lp_1_pg_2/177-4872792-4084836?rh=n%3A283155%2Cn%3A%211000%2Cn%3A1&amp;page=2&amp;ie=UTF8&amp;qid=1376771097">
<span id="pagnNextString">Next Page</span>
<span class="srSprite pagnNextArrow"></span>
</a>

所以只需像这样添加标题信息

例子:

from bs4 import BeautifulSoup
import urllib2

req = urllib2.Request("http://www.amazon.com/s?rh=n%3A1")
req.add_header('User-agent', 'Mozilla/5.0\
            (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko)\
            Chrome/23.0.1271.97 Safari/537.11')

html_page = urllib2.urlopen(req)

if html_page.getcode() == 200:
    soup = BeautifulSoup(html_page)
    link = soup.find("a", {"title" : "Next Page"})
    print link['href']

else:
    print "Error loading page"

输出:

/s/ref=lp_1_pg_2/176-2670743-2970243?rh=n%3A283155%2Cn%3A%211000%2Cn%3A1&page=2&ie=UTF8&qid=1376771750
 类似资料:
  • 我正在尝试使用BeautifulSoup转换HTML文本块。以下是一个示例: 我试着做了这样的事情: ...但是这样我的span元素总是在新行上。这当然是一个简单的例子。有没有办法在超文本标记语言页面中获取文本,就像它在浏览器中呈现的方式一样(不需要css规则,只是div、spans、li等元素呈现的常规方式)在Python中?

  • 我有一个docx文件,带有Calibri Light的Heading1样式(每隔一个文本也使用Calibri Light)。转换为html后,每个文本都是Calibri Light(正确),但当我打开html文件时,Heading1样式的文本是Times New Roman。(原因:html文件内部没有为Heading1样式设置字体系列) 当我打开docx文件并检查Heading1样式的字体时,它

  • 我想让我的段落正确地显示出来。 段落示例: Lorem ipsum dolor坐在这里,奉献给我们。拍卖商,拍卖商,拍卖商。整数nec别名urna,一个微调猫。nunc mi quam,简历pharetra quis,dapibus等。二重奏等精英和大人物。莫尔比怀疑一个多洛坐在一起。nunc aliquam, eros molestie eeffitur faucibus, orci diam

  • 对于上面的html内容,我如何使用Jsoup解析并获取文本 当我使用 我得到了这样的东西

  • 我是新来的。我想解析html,但问题是我们必须在中指定的URL,我将在运行时从其他页面响应此URL。有没有办法将收到的网址传递到中?我读过这样的东西: 但是我不知道如何使用它。我很想知道是否有其他方法比jsoup更好。

  • 我试图在HTML的pre标签中包装文本,但它不起作用。我使用下面的CSS作为我的标签。 我从如何在pre标记中换行文本? 我已添加