Ryf*_*lex 6 python selenium pyqt web-scraping python-2.7
我正在尝试使用以下代码,它工作正常,但它不允许JavaScript首先运行,这意味着我没有从网页获得所需的HTML.
我已经看了一下,DryScrape但据我所知,它不支持发布,就像你在auto_login()功能中看到的一样,同样适用PyQt4.
有问题的网站有4位JSON"列表"?形成加载/渲染页面; 如果我查看源它没有很好地显示,我不能轻易找到它的内容,但是如果我在页面上"检查元素",HTML看起来很完美,然后我可以轻松地查看它BeautifulSoup.
我知道我可以使用Selenium,但这不是我想做的主要是因为想要它在后台运行,我可以使用PhantomJS或PyVirtualDisplay做到这一点,但这只是作为最后的手段.
import requests
from bs4 import BeautifulSoup
HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-US,en;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'}
SESSION = requests.session()
RESPONSE = requests.Response
email = "mail@mail.com"
pass = "password123"
def auto_login():
global RESPONSE
url = "https://website.com/log.php"
payload = {
"log":email,
"pwd":pass,
"finish":"https://website.com/listed/public/gen1/",
}
RESPONSE = SESSION.post(url, data=payload, headers=HEADERS, verify=False)
def process_html():
PROCESSED_HTML = BeautifulSoup(RESPONSE.content, 'html.parser')
return PROCESSED_HTML
def main():
auto_login()
PROCESSED_HTML = get_html()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
如何使用我的脚本(已修改)轻松呈现网页的JavaScript,最好不要使用PyQt4(DryScrape因为某种原因,无法在我的Windows 10,Python 2.7上正确安装)Selenium.
任何想法,将不胜感激.
我无法让 dryscape 为我工作,所以我无法对此进行测试;然而,我认为这个想法/黑客可能有效 - 可能需要一些小的调整。
这个想法是,您创建一个小型的本地 HTML 文件,其中包含表单和需要传递的参数。此 HTML 文件是用 Python 创建的,以便您可以将值传递给每个参数。
根据文档,dryscrape 可以提交表单,因此您提交表单,它应该会带您到达您需要去的地方。
就像是:
import dryscrape
payload = {'log':email, 'pwd':pass, 'finish':'https://website.com/listed/public/gen1/'}
html = '''
<form action="https://website.com/log.php" method="POST">
<input name="log" type="text" value="{log}">
<input name="pwd" type="password" value="{pwd}">
<input name="finish" type="text" value="{finish}">
<input type="submit">
</form>
'''.format(**payload)
with open('./temp.html','w') as hf:
hf.write(html)
sess = dryscrape.Session(base_url = './') # maybe 'file://' is needed?
q = sess.visit('/temp.html')
q.form().submit()
# Remainder of your code to follow...
Run Code Online (Sandbox Code Playgroud)
同样,我无法自己测试这一点,因此可能需要一些细微的调整。
不是很优雅,但只是一个想法......:-)
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |