使用 Python 抓取 javascript 生成的页面
Scraping a javascript generated page using Python
我需要为https://hasjob.co/抓取一些信息,我可以通过登录页面抓取一些信息并像往常一样抓取,但大部分信息都是由Javascript生成的,只有当你向下滚动到页面底部。
任何使用 python 的解决方案??
import mechanize
import cookielib
from bs4 import BeautifulSoup
import html2text
import pprint
job = []
# Browser
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Chrome')]
# The site we will navigate into, handling it's session
br.open('https://auth.hasgeek.com/login')
# View available forms
##for f in br.forms():
## print f
# Select the second (index one) form (the first form is a search query box)
br.select_form(nr=1)
# User credentials
br.form['username'] = 'username'
br.form['password'] = 'pass'
br.submit()
##print(br.open('https://hasjob.co/').read())
r = br.open('https://hasjob.co/')
soup = BeautifulSoup(r)
for tag in soup.find_all('span',attrs={'class':'annotation bottom-right'}):
p = tag.text
job.append(p)
pp = pprint.PrettyPrinter(depth=6)
pp.pprint(job)
您可以查看 python 模块 PyV8,它是 python Google V8 javascript 引擎的包装器。
您也可以尝试通过 selenium 使用 ghostdriver,请参见此处的示例:Selenium with GhostDriver in Python on Windows。使用 selenium,您可以选择在 Firefox 或 Chrome(通过 chromedriver)中使用 运行 可视化浏览器实例,然后在您的抓取工具运行时切换到 PhantomJS(无窗口浏览器)在职的。请注意,虽然创建一个完整的浏览器实例可能完全是矫枉过正,但它实际上取决于您在做什么。如果您不 运行 太频繁地使用它,我想这很好,但通常 selenium 用于浏览器测试而不是用于抓取。
由于某种原因,几乎没有人注意到 Hasjob 有一个 Atom 提要,并且它是从主页链接的。使用 feedparser library 从 Hasjob 读取结构化数据非常简单:
import feedparser
feed = feedparser.parse('https://hasjob.co/feed')
for job in feed.entries:
print job.title, job.link, job.published, job.content
Feed 过去 30 天都满了,但现在有 800 多个条目并且服务器负载相当大,所以我将其缩减为最近 24 小时的工作。如果你想要定期帮助工作,只需每天至少从这个 URL 加载一次。
我需要为https://hasjob.co/抓取一些信息,我可以通过登录页面抓取一些信息并像往常一样抓取,但大部分信息都是由Javascript生成的,只有当你向下滚动到页面底部。
任何使用 python 的解决方案??
import mechanize
import cookielib
from bs4 import BeautifulSoup
import html2text
import pprint
job = []
# Browser
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Chrome')]
# The site we will navigate into, handling it's session
br.open('https://auth.hasgeek.com/login')
# View available forms
##for f in br.forms():
## print f
# Select the second (index one) form (the first form is a search query box)
br.select_form(nr=1)
# User credentials
br.form['username'] = 'username'
br.form['password'] = 'pass'
br.submit()
##print(br.open('https://hasjob.co/').read())
r = br.open('https://hasjob.co/')
soup = BeautifulSoup(r)
for tag in soup.find_all('span',attrs={'class':'annotation bottom-right'}):
p = tag.text
job.append(p)
pp = pprint.PrettyPrinter(depth=6)
pp.pprint(job)
您可以查看 python 模块 PyV8,它是 python Google V8 javascript 引擎的包装器。
您也可以尝试通过 selenium 使用 ghostdriver,请参见此处的示例:Selenium with GhostDriver in Python on Windows。使用 selenium,您可以选择在 Firefox 或 Chrome(通过 chromedriver)中使用 运行 可视化浏览器实例,然后在您的抓取工具运行时切换到 PhantomJS(无窗口浏览器)在职的。请注意,虽然创建一个完整的浏览器实例可能完全是矫枉过正,但它实际上取决于您在做什么。如果您不 运行 太频繁地使用它,我想这很好,但通常 selenium 用于浏览器测试而不是用于抓取。
由于某种原因,几乎没有人注意到 Hasjob 有一个 Atom 提要,并且它是从主页链接的。使用 feedparser library 从 Hasjob 读取结构化数据非常简单:
import feedparser
feed = feedparser.parse('https://hasjob.co/feed')
for job in feed.entries:
print job.title, job.link, job.published, job.content
Feed 过去 30 天都满了,但现在有 800 多个条目并且服务器负载相当大,所以我将其缩减为最近 24 小时的工作。如果你想要定期帮助工作,只需每天至少从这个 URL 加载一次。