无法从网站上获取HTML

4

我正在从网站中获取HTML内容,通过发送头部信息使网站认为我只是一名浏览该网站的用户,操作如下:

def page(goo):
    import fileinput
    import sys, heapq, array, urllib
    import BeautifulSoup
    from BeautifulSoup import BeautifulSoup
    import re
    from urllib import FancyURLopener
    class MyOpener(FancyURLopener):
        version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
    myopener = MyOpener()
    filehandle = myopener.open(goo)
    return filehandle.read()
page=page(WebSite)

这在大多数网站上都可以完美运行,甚至包括Google和Wikipedia,但是在Tmart.com上却不行。不知何故,Tmart能看出这不是一个Web浏览器,并返回错误信息。我该怎么解决?


如果您复制并粘贴错误或堆栈跟踪,那将非常有帮助。 - aychedee
2
提示:该网站使用 JavaScript 设置 Cookie,并忽略没有正确 Cookie 的请求。 - Anonymous Coward
1个回答

6

他们可能检测到你没有JavaScript解释器?在没有看到你收到的错误消息之前很难确定。不过有一种方法是保证起作用的。那就是使用Selenium Webdriver直接驱动浏览器。

Selenium通常用于功能测试网站。但它也非常适用于爬取使用JavaScript的网站。

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://www.someurl.com')

html = browser.page_source

请查看此处浏览器可用的所有方法:http://code.google.com/p/selenium/source/browse/trunk/py/selenium/webdriver/remote/webdriver.py。为了使其正常工作,您还需要拥有chromedriver可执行文件:http://code.google.com/p/chromedriver/downloads/list

我运行了以下代码:<br> #!python27 def page(goo): from selenium import webdriver browser = webdriver.Chrome() browser.get(goo) html = browser.page_source return html.read()page("tmrat.com") 但是我得到以下错误信息:<br> Traceback (most recent call last): File "C:\Users\Server\Downloads\scaner.py", line 9, in <module> page("tmrat.com") File "C:\Users\Server\Downloads\scaner.py", line 3, in page from selenium import webdriver File "C:\Users\Server\Downloads\selenium.py", line 806 Hide details ^ SyntaxError: invalid syntax - user1849106
看起来你没有正确安装selenium。你有执行过pip install selenium吗?或者只是随机下载了它的一部分代码?它是一个完整的软件包。请删除文件C:\Users\Server\Downloads\selenium.py并正确安装selenium。另外,browser.page_source是一个字符串,不需要使用read()方法。 - aychedee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接